智能车制作
标题:
求教有关PWM控制舵机的程序
[打印本页]
作者:
南极之星
时间:
2010-4-6 10:58
标题:
求教有关PWM控制舵机的程序
这个是我从一本教科书上找来的程序,想拿来试下用PWM控制舵机
但是不懂为什么没有波形输出
因为是新手,悬赏不是很多。。。。
程序如下
#include <hidef.h>
#include <mc9s12dg128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#define BUS_FREQ 32000000 //总线频率
#define PWM_PRCLK 0x22 //CH_A=CH_B=BUS_FREQ/4
#define CH_A_FREQ 8000000 //时钟A频率
#define CH_B_FREQ 8000000 //时钟B频率
#define CH_SA_FREQ 1000000 //时钟SA频率
#define CH_SB_FREQ 1000000 //时钟SB频率
#define CH_SA_DIV (CH_A_FREQ/(CH_SA_FREQ*2)) //CH_SA_DIV=4
#define CH_SB_DIV (CH_B_FREQ/(CH_SB_FREQ*2)) //CH_SB_DIV=4
#define STEER_FREQ 100 //舵机频率100Hz
void Pwm_init(void) {
PWMPRCLK=PWM_PRCLK;
PWMSCLA=CH_SA_DIV;
PWMSCLB=CH_SB_DIV;
PWMCTL_CON45=1;、 //组合PWM45
PWMCTL_CON67=1;
PWMCTL_CON23=1;
PWMCLK_PCLK5=1; //PWM5使用SA
PWMCLK_PCLK3=1;
PWMCLK_PCLK7=1;
PWMPER45=(CH_SA_FREQ/STEER_FREQ);
PWMPER23=(CH_SB_FREQ/MOTOR_FREQ);
PWMPER67=(CH_SB_FREQ/MOTOR_FREQ);
PWMPOL_PPOL5=1; //写PWM45的周期寄存器
PWMPOL_PPOL3=0;
PWMPOL_PPOL7=0;
PWMCAE=0x00;
PWME_PWME5=1; //左对齐
}
void Motor_back(uint duty) {
PWMDTY45=duty;
}
void delay(unsigned int delay_time) {
unsigned int loop_i,loop_j;
for(loop_i=0;loop_i<delay_time;loop_i++)
for(loop_j=0;loop_j<500;loop_j++)
_FEED_COP();
}
void main(void) {
Pwm_init();
Motor_back(9250);
delay(2000);
for(;;){
Motor_back(9500);
delay(2000);
Motor_back(9000);
delay(2000);
}
}
复制代码
作者:
cys179
时间:
2010-4-6 16:42
你随便找个技术报告后面的pwm初始化代码用上就可以了。这个就几个寄存器的初始化没什么难度的。技术报告后面的代码可能没有问题。
补充内容 (2015-4-23 09:15):
真人游戏|足球篮球|时时彩| 六合投注|
网络赚钱去SO娱乐城:顶级信用,提现百分百即时到账SO.CC
作者:
南极之星
时间:
2010-4-7 21:05
找了几个试了下,但是舵机仍旧是只有上电的瞬间会动下
作者:
lhlacml
时间:
2010-4-7 23:45
怎么都是DG的啊,没有XS的吗
作者:
446373380
时间:
2010-4-8 10:27
急需解决啊
作者:
dzh1024
时间:
2010-4-8 10:49
新手 不懂
作者:
clgt2001
时间:
2010-4-8 19:47
新手 不懂
作者:
lhqx
时间:
2010-4-8 21:19
不明白
作者:
jiutian0396
时间:
2010-4-11 09:16
使劲看看就明白了
作者:
cyyan
时间:
2010-4-22 21:11
试试这个
void main(void) {
/* put your own code here */
PWME=0X00;//
PWMCTL=0X00;
PWMPRCLK=0X66;
PWMCLK=0XFF;
PWMSCLA=0X0D;
PWMSCLB=0X0D;
PWMPOL=0XFF;
PWMCAE=0X00;
PWMPER0=0X09;
PWMDTY0=0X05;
PWME=0X01;
EnableInterrupts;
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
作者:
luoguoying
时间:
2010-4-22 21:25
试试我编的这个:
//-------------------------------------------
//功能说明:MC9S12XS128--PWM 例程
//使用说明:实现通道3(PP3)输出频率为50Hz,占空比为2%至14%之间循环变化
//-------------------------------------------
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include <MC9S12XS128.h> /* derivative information */
#define uint unsigned int
#define uchar unsigned char
uchar PWMDTY_NUM=13; //PWM通道周期寄存器
//-----时钟初始化程序------//
void PLL_Init(void)
{
REFDV=1; //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
SYNR=2; //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
while(!(CRGFLG & 0x08));
CLKSEL=0x80; //选定锁相环时钟
}
//--------------------------------
void Delay(void) {
unsigned int i,j;
for(i=0;i<50;i++)
for(j=0;j<3388;j++);
}
//------------------------------
void MCU_Init(void)
{
DDRB=0x00;
DDRP=0x08;
PUCR_PUPBE=1;
}
//-------PWM初始化程序--------//
static void PWM_Init(void)
{
// PWME_PWME3=0;
PWMPRCLK=0x55;//0010 0010 A=B=24M/32=750K 时钟预分频寄存器设置
PWMSCLA=5; //SA=A/2/5=75K
PWMSCLB=50; //SB=B/2/50=7.5K
PWMCLK_PCLK3=1;//PWM3---SB
PWMPOL_PPOL3=1;//Duty=High Time
PWMCAE_CAE3=0;//Left-aligned
PWMCTL=0x00; //no concatenation
PWMPER3=150; //Frequency=SB/150=50
PWMDTY3=13; //Duty cycle=8.6%
PWME_PWME3=0; //Disable PWM
}
//--------PWM占空比改变函数---------//
//---K每改变1,占空比就改变0.7%
void Change_dutycycle(uchar k)
{
PWME_PWME3=1;
PWMDTY3=k;
// PWM_Init();
}
//-------------------------------------------------
void main(void) {
/* put your own code here */
PLL_Init();
PWM_Init();
MCU_Init();
// EnableInterrupts;
PWMDTY_NUM=13;
for(;;) {
PWMDTY_NUM++;
if(PWMDTY_NUM>23){
PWMDTY_NUM=2;
Delay();
}
Change_dutycycle(PWMDTY_NUM);
// _FEED_COP(); /*feeds the dog*/
} /* loop forever */
/* please make sure that you never leave main */
}
作者:
zwypp0304
时间:
2010-4-23 22:36
谢谢分享
作者:
zwypp0304
时间:
2010-4-23 22:37
谢谢分享
作者:
tz0704321
时间:
2010-5-9 12:48
作者:
言言非心
时间:
2011-9-27 15:19
求高手了!
作者:
无敌快车
时间:
2011-11-22 21:28
那我也先收藏一下
作者:
liyun9999
时间:
2012-2-26 19:35
没有波形。。。
作者:
了修明日
时间:
2013-4-6 15:10
xuexi
作者:
誉,
时间:
2013-4-6 17:41
cyyan 发表于 2010-4-22 21:11
试试这个
void main(void) {
/* put your own code here */
亲···能注释下么?
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2