舵机(RB-65CS)的使用PWM控制正反转的问题,求单片机达人简答,高分 100
小弟使用的是STC12C5A60S2的单片机,让输出口p0^0,p0^1输出为带有一定占空比的pwm波形,作为舵机的输入,整套小车是老师给的,今天全装好后测试能正常运行。...
小弟使用的是STC12C5A60S2的单片机,让输出口p0^0,p0^1输出为带有一定占空比的pwm波形,作为舵机的输入,整套小车是老师给的,今天全装好后测试能正常运行。但是因为我只用到其中一个芯片,下载程序到芯片后出现如下问题:p0^0,P0^1口均能输出想要的pwm波形,但是一旦插上舵机,波形就变了,老师说是程序问题,但是真心不知道哪儿出问题了。
附程序:
#include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned int uint;//**********************端口定义*********************//sbit Motor_1 = P0^0;sbit Motor_2 = P0^1;
sfr AUXR=0x8e;
int pwm_count1=0;int pwm_count2=0;//***************************************************void delayms(uint k);void timer0_init();//***************************************************
//*****************************//毫秒级延时函数(约1ms)//******************************void delayms(uint k) { uint i,j; for(i=0;i<k;i++) { for(j=0;j<121;j++); } }//**************************************//定时器0的初始化(10us的定时器)//***************************************
void timer0_init(){ AUXR=0x80; TMOD=0x01; //定时器0初始为16位计数 TH0=0xfd; //装入计时初值 TL0=0xd6; EA=1; //开总中断 ET0=1; //开定时器0溢出中断 TR0=1; //开始计数}//**********************************************//定时器中断服务程序//**********************************************void timer_0() interrupt 1{ TH0=0xfd; //重新装入计时初值 TL0=0xd6; pwm_count1++;}void main(void){ int i; timer0_init(); Motor_1=1; Motor_2=1; while(1) { if(pwm_count1==30) { Motor_1=0; Motor_2=0; //左右电机变为低电平 } if(pwm_count1==395) { pwm_count1=0; Motor_1=1; Motor_2=1; //左右电机变为高电平 } }} 展开
附程序:
#include <reg52.h>#include <intrins.h>typedef unsigned char uchar;typedef unsigned int uint;//**********************端口定义*********************//sbit Motor_1 = P0^0;sbit Motor_2 = P0^1;
sfr AUXR=0x8e;
int pwm_count1=0;int pwm_count2=0;//***************************************************void delayms(uint k);void timer0_init();//***************************************************
//*****************************//毫秒级延时函数(约1ms)//******************************void delayms(uint k) { uint i,j; for(i=0;i<k;i++) { for(j=0;j<121;j++); } }//**************************************//定时器0的初始化(10us的定时器)//***************************************
void timer0_init(){ AUXR=0x80; TMOD=0x01; //定时器0初始为16位计数 TH0=0xfd; //装入计时初值 TL0=0xd6; EA=1; //开总中断 ET0=1; //开定时器0溢出中断 TR0=1; //开始计数}//**********************************************//定时器中断服务程序//**********************************************void timer_0() interrupt 1{ TH0=0xfd; //重新装入计时初值 TL0=0xd6; pwm_count1++;}void main(void){ int i; timer0_init(); Motor_1=1; Motor_2=1; while(1) { if(pwm_count1==30) { Motor_1=0; Motor_2=0; //左右电机变为低电平 } if(pwm_count1==395) { pwm_count1=0; Motor_1=1; Motor_2=1; //左右电机变为高电平 } }} 展开
2个回答
展开全部
凑个热闹。我对舵机原理不熟,但估计也是个线圈吧?用手机看不清图片,不知变形成什么。假如波形是直接驱动线圈的,那么由于电感作用,波形变了也合理。如果输出波形和预想的一致,那证明程序是正确的,不可能因为负载而不错。难不成您还要根据负载特性输出模拟信号,然后测出一个理想方波?有可能的话,用驱动桥试试就知道了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
艾普斯
2024-07-18 广告
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产...
点击进入详情页
本回答由艾普斯提供
展开全部
if(pwm_count1==30) //这改成>=
{
Motor_1=0;
Motor_2=0; //左右电机变为低电平
}
if(pwm_count1==395) //这也改成>=,这个if应该是被嵌套进上个if里的
{
pwm_count1=0;
Motor_1=1;
Motor_2=1; //左右电机变为高电平
}
再检查下硬件 是不是舵机的干扰引起的 舵机和MUP的电源分开
{
Motor_1=0;
Motor_2=0; //左右电机变为低电平
}
if(pwm_count1==395) //这也改成>=,这个if应该是被嵌套进上个if里的
{
pwm_count1=0;
Motor_1=1;
Motor_2=1; //左右电机变为高电平
}
再检查下硬件 是不是舵机的干扰引起的 舵机和MUP的电源分开
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询