|
本帖最后由 moyuqilin 于 2016-1-26 21:58 编辑
PWM驱动电机,之前没有接触过带有PWM的STC的芯片,在这个问题上卡了一天,小车上共用了4路PWM,PWM2,PWM3,PWM4,PWM5,。通过飞思卡尔的电机驱动芯片驱动电机,两路驱动一个电机;
STC15系列中共有6通道高精度PWM,
在配置PWM相关寄存器前要先设置引脚模式,设置为推挽输出
然后配置PWM相关寄存器,
P_SW2 |=0x80; //访问特殊功能寄存器
P_SW2第7位设置为1,允许访问接下来的特殊功能寄存器
PWMCFG=0x00; //设置PWM初始电平为低电平
PWMCKS = 0x00; //选择PWM的时钟为Fosc/(0+1)
配置PWM初始电平及时钟
PWMC=20001; //PWM周期
PWM的周期设置,不太理解,可设置1-32767之间,手边没有示波器,没有测试其效果
PWM2T1=20000; //PWM2第一次翻转点
PWM2T2=20001; //PWM2第二次翻转点
设置两个PWM翻转点,占空比=(PWM3T2-PWM3T1)/PWMC
其他通道的一样设置,
PWM2CR=0x00;
PWM3CR=0x00;
PWM4CR=0x00;
PWM5CR=0x00;
控制各个通道PWM
PWMCR=0x8f; //使能PWM
这句话要在前面都配置好以后再配置
接下来就可以输出PWM了,
在主程序中更改PWC和PWM2T1,PWM2T2,改变PWM波形
因为本次小车的电机由两路PWM控制,之前在接触STM32时用过互补PWM输出,在这里也写了一个,效果还可以
/*************************************************
**函数名: PWM2And3_HubuConter
**功能: PWM2,3,互补PWM控制电机
**说明: 占空比为50,电机停转,为45和55时,转速相同,方向相反
**入口参数: PWM周期CYCLE,占空比DUTY
**返回值: 无
************for*****moyuqilin19*******************/
void PWM2And3_HubuConter(long int CYCLE,long int DUTY)
{
PWMC=CYCLE;
PWM2T1=0x0000;
PWM2T2=CYCLE*DUTY/100;
PWM3T1=0x0000;
PWM3T2=CYCLE*(100L-DUTY)/100;
}
效果
UsatConteMot.zip
(42.49 KB, 下载次数: 16)
附件一个自己写的串口1控制电机转的,下一个:
编码器数据采集
|
评分
-
查看全部评分
|