OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8261|回复: 21

求一个mini版的stm32控制舵机的程序...

[复制链接]

3

主题

12

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-4-13
在线时间
5 小时
发表于 2016-4-14 21:25:48 | 显示全部楼层 |阅读模式
想用mini版stm32里面给的PWM例程控制舵机的正反转 ,怎么实现,有的给个工程啊 可以发我邮箱710772586@qq.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-15 09:25:53 | 显示全部楼层
这是战舰的    不知道合不合适你!合适的话自己改到mini板了

实验9 PWM输出实验 (0.5MS~2.5MS).zip

1.06 MB, 下载次数: 2797

回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-15 23:30:13 | 显示全部楼层
hpeng1874 发表于 2016-4-15 09:25
这是战舰的    不知道合不合适你!合适的话自己改到mini板了

话说为什么要用寄存器?别人会看得很累的
回复 支持 反对

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-16 09:35:10 | 显示全部楼层
单模先声 发表于 2016-4-15 23:30
话说为什么要用寄存器?别人会看得很累的

个人喜欢!你也可以拿着库函数版的PWM+按键实验仿照改!    so easy
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-4-13
在线时间
5 小时
 楼主| 发表于 2016-4-16 11:19:49 | 显示全部楼层
hpeng1874 发表于 2016-4-15 09:25
这是战舰的    不知道合不合适你!合适的话自己改到mini板了

确实看的很累,有库函数版本的吗
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-4-13
在线时间
5 小时
 楼主| 发表于 2016-4-16 11:22:19 | 显示全部楼层
hpeng1874 发表于 2016-4-15 09:25
这是战舰的    不知道合不合适你!合适的话自己改到mini板了

能说明一下为什么0.5ms的时候,你给出的对应电压值是9750吗,9750怎么算来的
switch(key)
                        {
                                case WKUP_PRES:
                                        LED0_PWM_VAL=9750;  //0.5MS
                                        delay_ms(5000);
                                        break;
回复 支持 反对

使用道具 举报

3

主题

12

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-4-13
在线时间
5 小时
 楼主| 发表于 2016-4-16 11:36:45 | 显示全部楼层
hpeng1874 发表于 2016-4-15 09:25
这是战舰的    不知道合不合适你!合适的话自己改到mini板了

这是mini版的 pwm例程,能帮我看看怎么改成控制舵机的正反转角度和速度吗 谢谢大神了

ALIENTEK MINISTM32 实验8 PWM输出实验.rar

281.55 KB, 下载次数: 1675

回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2016-3-27
在线时间
26 小时
发表于 2016-4-17 16:46:22 | 显示全部楼层
本帖最后由 探索者去 于 2016-4-17 16:48 编辑

试一下 int main(void) {       
        //u16 led0pwmval=0;   
        //u8 dir=1;       
        delay_init();                     //Ñóê±oˉêy3õê¼»ˉ          
        LED_Init();                          //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
        TIM1_PWM_Init(200,7199);//2»·ÖÆμ¡£PWMÆμÂê=72000/(899+1)=80Khz
           while(1)
        { TIM_SetCompare1(TIM1,10);
                delay_ms(500);
                 TIM_SetCompare1(TIM1,15);
                 delay_ms(500);
                 TIM_SetCompare1(TIM1,20);
                 delay_ms(500);
                 TIM_SetCompare1(TIM1,15);
                delay_ms(500);
         TIM_SetCompare1(TIM1,10);
                delay_ms(500);
                 TIM_SetCompare1(TIM1,5);
                delay_ms(500);
        }
}

回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-17 17:31:29 | 显示全部楼层
hpeng1874 发表于 2016-4-16 09:35
个人喜欢!你也可以拿着库函数版的PWM+按键实验仿照改!    so easy

switch(key)
                        {
                                case WKUP_PRES:
                                        LED0_PWM_VAL=9750;  //0.5MS
                                        delay_ms(5000);
                                        break;
                       
                                case KEY2_PRES:
                                        LED0_PWM_VAL=9500;        //1.0MS
                                        delay_ms(5000);
                                        break;
                       
                                case KEY1_PRES:
                                        LED0_PWM_VAL=9000;        //2.0MS
                                        delay_ms(5000);
                                        break;
                       
                                case KEY0_PRES:
                                        LED0_PWM_VAL=8750;        //2.5MS
                                        delay_ms(5000);
                                        break;       
                        }
                }
                LED0_PWM_VAL=9250;        //1.5MS                请问你的LED0_PWM_VAL和时间是怎么计算的?为什么8750是2.5毫秒?
回复 支持 反对

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-17 17:52:27 | 显示全部楼层
本帖最后由 hpeng1874 于 2016-4-17 17:57 编辑
单模先声 发表于 2016-4-17 17:31
switch(key)
                        {
                                case WKUP_PRES:

T=20ms且ARR=9999
则每一次的计数时间为2us
2.5ms/2us=1250次
由于是向下计数,所以10000-1250=8750


回复 支持 反对

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-17 17:58:11 | 显示全部楼层
hongzhiyong 发表于 2016-4-16 11:22
能说明一下为什么0.5ms的时候,你给出的对应电压值是9750吗,9750怎么算来的
switch(key)
                        {

见10楼!同理
回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-17 18:20:27 | 显示全部楼层
hpeng1874 发表于 2016-4-17 17:52
T=20ms且ARR=9999
则每一次的计数时间为2us
2.5ms/2us=1250次

是不是大于8750就是输出高电平?
回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-18 22:56:41 | 显示全部楼层

TIM3_PWM_Init(9999,143);        // 50HZ

这是你的程序的,我不明白,72000000 / 144 = 50 0000HZ

为什么你的是50HZ?
回复 支持 反对

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-18 23:02:23 | 显示全部楼层
单模先声 发表于 2016-4-18 22:56
TIM3_PWM_Init(9999,143);        // 50HZ

这是你的程序的,我不明白,72000000 / 144 = 50 0000HZ




72000000/1440000=50

回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-18 23:19:49 | 显示全部楼层

你看一下你自己的程序,TIM3_PWM_Init(9999,143);    是144,不是1440000。是你写错了还是函数里面乘以10000?
回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-19 16:12:21 | 显示全部楼层
单模先声 发表于 2016-4-18 23:19
你看一下你自己的程序,TIM3_PWM_Init(9999,143);    是144,不是1440000。是你写错了还是函数里面乘以10 ...

怎么不回复了?
回复 支持 反对

使用道具 举报

8

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2015-2-9
在线时间
10 小时
发表于 2016-4-19 17:43:07 | 显示全部楼层
就是输出PWM信号    然后改变占空比就可以控制正反转啦
回复 支持 反对

使用道具 举报

3

主题

794

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
1502
金钱
1502
注册时间
2015-3-3
在线时间
460 小时
发表于 2016-4-20 23:41:11 | 显示全部楼层

你先去了解一下   怎么计算频率先
回复 支持 反对

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2016-4-21 08:14:12 | 显示全部楼层
hpeng1874 发表于 2016-4-20 23:41
你先去了解一下   怎么计算频率先

我了解啊,但是你的确实是144啊,除出来的结果是50 0000啊
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2020-6-23
在线时间
4 小时
发表于 2020-6-24 22:35:50 | 显示全部楼层
请问硬件怎么连接
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2020-6-22
在线时间
9 小时
发表于 2020-8-2 17:36:06 | 显示全部楼层
单模先声 发表于 2016-4-18 22:56
TIM3_PWM_Init(9999,143);        // 50HZ

这是你的程序的,我不明白,72000000 / 144 = 50 0000HZ

(72000000/(9999+1))/144=50
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-11-20
在线时间
1 小时
发表于 2022-1-30 17:54:02 | 显示全部楼层
hongzhiyong 发表于 2016-4-16 11:22
能说明一下为什么0.5ms的时候,你给出的对应电压值是9750吗,9750怎么算来的
switch(key)
                        {

这个是min版的

servo.zip

301.35 KB, 下载次数: 13

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 23:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表