Instruction about multifunction module.
PWM you can use normal PWM IO but if you want to HOLD after closed module gate, the signal
You should write in main function like this:
ex) RC servo
initPWM(spiChan, 24, 40950, 0, 0, 0); //frequency = 40950/4095 = 10msec
LPC1110 clock = 48MHz
clock/divider = 48MHz/24 = 2MHz
t =Frequency/2MHz = 0.02sec = 20msec
40950 : 20mse = X : Ymsec <-You can calucurate from this in the ratio.
PWMDuty(spiChan, ch, duty);
The duty is available from 1msec(0x7FF) to 2msec(0xFFF) for RC servo
void setIOSimpleSPI(MCUGear *mcugear); void initPWM(int spichan, unsigned int Divider, unsigned int friquency, unsigned int duty0, unsigned int duty1, unsigned int duty2); void PWMfriq(int spichan, unsigned int friquency); void PWMDuty(int spichan, int ch, unsigned int Duty); void stopPWM(int spichan);
void setIOSimpleSPI(MCUGear *mcugear){
//for AD 2ch, AD 8ch and multifunction module
//1:MISO 13
//2:MOSI 12
//3:SCK 14
//4:CE0 10
mcugear->setWire(IO_13, IO_REG_IN_DIR, 0);
mcugear->setWire(IO_12, IO_REG_OUT_DIR, 1);
mcugear->setWire(IO_14, IO_REG_OUT_DIR, 2);
mcugear->setWire(IO_10, IO_REG_OUT_DIR, 3);
}
void initPWM(int spichan, unsigned int Divider, unsigned int friquency, unsigned int duty0, unsigned int duty1, unsigned int duty2){
unsigned char spiBuff[2];
spiBuff[0] = (Divider >> 8);
spiBuff[1] = (0x00FF & Divider);
wiringPiSPIDataRW(spichan,spiBuff,2);
spiBuff[0] = (friquency >> 8);
spiBuff[1] = (0x00FF & friquency);
wiringPiSPIDataRW(spichan,spiBuff,2);
spiBuff[0] = (duty0 >> 8);
spiBuff[1] = (0x00FF & duty0);
wiringPiSPIDataRW(spichan,spiBuff,2);
spiBuff[0] = (duty1 >> 8);
spiBuff[1] = (0x00FF & duty1);
wiringPiSPIDataRW(spichan,spiBuff,2);
spiBuff[0] = (duty2>> 8);
spiBuff[1] = (0x00FF & duty2);
wiringPiSPIDataRW(spichan,spiBuff,2);
}
void PWMfriq(int spichan, unsigned int friquency){
unsigned char spiBuff[2];
spiBuff[0] = (friquency >> 8);
spiBuff[1] = (0x00FF & friquency);
wiringPiSPIDataRW(spichan,spiBuff,2);
}
void PWMDuty(int spichan, int ch, unsigned int duty){
unsigned char spiBuff[2];
switch(ch){
case 1:
spiBuff[0] = ((0x3000 + duty)>> 8);
spiBuff[1] = (0x00FF & duty);
wiringPiSPIDataRW(spichan,spiBuff,2);
case 2:
spiBuff[0] = ((0x4000 + duty)>> 8);
spiBuff[1] = (0x00FF & duty);
wiringPiSPIDataRW(spichan,spiBuff,2);
case 3:
spiBuff[0] = ((0x5000 + duty)>> 8);
spiBuff[1] = (0x00FF & duty);
wiringPiSPIDataRW(spichan,spiBuff,2);
default:
break;
}
}
void stopPWM(nt spichan){
unsigned char spiBuff[2];
spiBuff[0] = 0x10;
spiBuff[1] = 0x00;
wiringPiSPIDataRW(spichan,spiBuff,2);
}
0 件のコメント:
コメントを投稿