完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
本帖最后由 zdldcyy 于 2013-5-5 10:45 编辑
本人正在用MSP430G2553做一个两相四线步进电机的驱动细分,模拟SPWM八细分。程序写好了,电机也动了,但振动特别大,还不如半步的稳定。麻烦做过步进电机细分的大虾帮我看看,问题出在哪呢。。。#include #include "M_2.h" unsigned int PDR_A[]={ //八细分正弦表,8000*sinθ 8000, 7846, 7391, 6652, 5656, 4445, 3061, 1561, 0, 1561, 3061, 4445, 5656, 6652, 7391, 7846, }; unsigned int PDR_B[]={ 0, 1561, 3061, 4445, 5656, 6652, 7391, 7846, 8000, 7846, 7391, 6652, 5656, 4445, 3061, 1561, }; unsigned char DIR[] = { 0xa0, 0x60, 0x50, 0x90, //IN1-4输入 }; void PWM_Init() { P1DIR|=0xf0; //1111,0000 P1.4--P1.7输出控制IN1-IN4 P1OUT&=0x0f; P2DIR|=0X02; //0000,0010 P2.1--TA1.1--CCR1--PWM_1 P2DIR|=0X10; //0001,0000 P2.4--TA1.2--CCR2--PWM_2 P2SEL|=0X12; //0001,0010 开启第二引脚功能 TA1CTL |=TASSEL_2+MC_1+TACLR; //时钟源选择SMCLK增计数模式 TA设置 TA1CCTL1 |=OUTMOD_7; //模式7 高电平PWM输出 PWM设置 TA1CCTL2 |=OUTMOD_7; TA1CCR0 = Freq-1; TA1CCR1 = 0; TA1CCR2 = 0; TA1CCTL0 = CCIE; // CCR0 interrupt enabled _EINT(); } void main() { //unsigned int i=0; WDTCTL=WDTPW+WDTHOLD; PWM_Init(); while(1) {} } #pragma vector=tiMER1_A0_VECTOR __interrupt void PWM_ISR (void) { // temp1 = (unsigned int)(Freq*PDR_1[cont]); // temp2 = (unsigned int)(Freq*PDR_2[cont]); // TA1CCR1 = temp1; // TA1CCR2 = temp2; TA1CCR1 = PDR_A[cont]; TA1CCR2 = PDR_B[cont]; if(cont%8==0) P1OUT = DIR[i++%4]; cont++; if(cont==16) cont = 0; }
Desktop.rar
(1.15 KB, 下载次数: 95
)
|
|
相关推荐
26 个讨论
|
|
只有小组成员才能发言,加入小组>>
3333个成员聚集在这个小组
加入小组9687 浏览 1 评论
10486 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
10807 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2669 浏览 1 评论
5128 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
10826浏览 2评论
10502浏览 1评论
9700浏览 1评论
8345浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-11 13:42 , Processed in 0.868570 second(s), Total 59, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
10976