智能车制作
标题:
PWM初始化问题,改变周期寄存器,车子就不断抖动
[打印本页]
作者:
守一
时间:
2013-4-8 22:31
标题:
PWM初始化问题,改变周期寄存器,车子就不断抖动
前段日子调试直立,在不加闭环的情况下,小车可以站立,但是会有抖动,学长说是因为滤波没有滤好,通过滤波小车直立情况有所好转,但是抖动一直无法消除,加P和加D都没有效果,通过观察发现在直立位置很小的范围内感觉电机反应不过来,角度变化1度,电机不会有变化,就是齿轮咬合的间隙电机没有反应,我就想到可能是PWM调节的占空比不够平滑,因为占空比寄存器最大是100,PWM周期10khz,再不改变频率的情况下,修改PWM预分频因子,改变占空比寄存器的数值范围,可是增大以后,就出现了一种始料不及的情况,电机会发出尖锐的鸣叫声,抖动还是无法消除,反复调试了好多次一直无法解决,按照我的理解,应该是PWM占空比改变不够平滑,因为,我是按照清华的方案做的,PD调节中改变寄存器的值时把float类型乘以占空比寄存器值转换成了uint类型,我担心数据转化过程会有精度丢失,就按照前面的方法修改,就是不明白为什么电机会发出尖锐的鸣叫声,望各位大神帮帮忙,解开我心中疑惑,在此表示不尽感激。
下面是pwm初始化程序,总线频率64M
/*
****************************************************************
*PWM初始化
*
*****************************************************************
*/
void PWM_Init(void)
{
PWME = 0X00; //PWM使能关闭
PWMPRCLK = 0X55; //clockA,CLK B64分频:2M
PWMSCLA = 0X02; //对clock SA 进行2*PWMSCLA=64分频;pwm clock=clockA/2=1M;
PWMSCLB = 0X02; //clk SB=clk B/(2*pwmsclb)=1M
PWMCTL = 0XF0; //对 PWM 控制寄存器进行设置,各通道级联使用
PWMCNT01 = 0X00; //通道计数器清 0
PWMPOL = 0XFF; //上升沿翻转,开始输出高电平
PWMCAE = 0X00; //左对齐输出
PWMPER01 = PWM_DUTY_CONST ; //per等于 100 周期0.1ms 频率 10khz
PWMDTY01 = 0; //dty等于 1000 初始化高电平时间1MS
PWMPER23 = PWM_DUTY_CONST ; //per等于 10000 10MS
PWMDTY23 = 0; //dty等于 1000 初始化高电平时间1MS
PWMPER45 = PWM_DUTY_CONST ; //per等于 100 周期0.1ms 频率 10khz
PWMDTY45 = 0; //dty等于 1000 初始化高电平时间1MS
PWMPER67 = PWM_DUTY_CONST ; //per等于 100 周期0.1ms 频率 10khz
PWMDTY67 = 0; //dty等于 1000 初始化高电平时间1MS
PWME=0XFF; //通道使能
}
作者:
toengineer
时间:
2013-4-10 10:05
中间小角度没有电压输出应该是没加死区电压吧
作者:
守一
时间:
2013-4-10 15:58
加死区电压了,但是没效果
作者:
红杏爱蓝颜
时间:
2013-4-11 18:05
不懂同求,@吉他手老师呀!!!大神们呢?
作者:
那年秋天
时间:
2013-5-10 23:52
toengineer 发表于 2013-4-10 10:05
中间小角度没有电压输出应该是没加死区电压吧
中间小角度怎么加四驱电压呀?求教
作者:
toengineer
时间:
2013-5-11 09:04
那年秋天 发表于 2013-5-10 23:52
中间小角度怎么加四驱电压呀?求教
一点点加上去,而且要求你的电机输出要对称
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2