OpenEdv-开源电子网

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

adc采集如何重复赋值给定时器给定步进电机频率

[复制链接]

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
发表于 2018-1-23 10:20:44 | 显示全部楼层 |阅读模式
5金钱
我这边初学者。想做一款产品。ADC检测外部电位器的可变电压,然后讲检测到的数值赋值给我这边步进电机速度。步进电机通过定时器给脉冲频率。我是希望随着电位器旋转速度是随之变化的。但是现在好像只会运行的时候检测一次电压。速度恒定。怎么解决这个问题?ADC中断?
while(1)//死循环  
     {       
                    
//                        adcx=adcx*10;
                        if(KEY1==0)
                        {
                                adcx=Get_Adc_Average();//得到ADC采集的数据   
                                step1_runhand(adcx,1);        //最高运行频率为3000,1为正转
                                LED1_ON;
                        }
                        if(KEY2==0)
                        {
                                adcx=Get_Adc_Average();//得到ADC采集的数据
                                step1_runhand(adcx,0);        //最高运行频率为3000,0为反转
                                LED2_ON;
                        }
                        if(KEY3==0)
                        {
                                TLCLOSE_flag=1;  //停止命令,不是直接停止输出脉冲,而是减速停止
                                LED1_OFF;
                                LED2_OFF;
                        }               
                                  
     }

最佳答案

查看完整内容[请看2#楼]

如果是电机的速度更不上,很正常啊!这是你的电机的带宽不够,相应太慢。就是你的ADC已经给电机控制信号了,但是电机要加或减到,给定的速度需要的时间比较久。这是电机控制算法的问题。程序逻辑解决不了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-23 10:20:45 | 显示全部楼层
stm32sport 发表于 2018-1-24 10:13
主要现在有这么个问题。每次判断,好像程序执行需要一定时间周期,耽误了赋值给定时器的值,然后速度就总 ...

如果是电机的速度更不上,很正常啊!这是你的电机的带宽不够,相应太慢。就是你的ADC已经给电机控制信号了,但是电机要加或减到,给定的速度需要的时间比较久。这是电机控制算法的问题。程序逻辑解决不了。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-1-23 10:38:33 | 显示全部楼层
提示下:  我这边是用个按键做启动开关。这个按键一直有效才会一直检测。怎么做到我只按下一次,ADC这个值会一直改变给定时器赋值?可能问题比较小白,抱歉。。。
回复

使用道具 举报

4

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2018-1-13
在线时间
13 小时
发表于 2018-1-23 11:06:40 | 显示全部楼层
你可以改下程序的写法,增加一些标志位,按下按键后改变,然后再去执行电机的动作,在不想动作的位置把标志位清零就OK了
回复

使用道具 举报

36

主题

227

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3096
金钱
3096
注册时间
2016-4-15
在线时间
350 小时
发表于 2018-1-23 11:19:36 | 显示全部楼层
要么换自锁开关,要么当按键按下你给一个flag
回复

使用道具 举报

23

主题

130

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2015-1-25
在线时间
83 小时
发表于 2018-1-23 11:25:00 | 显示全部楼层
dma 或者是定时器定时检测adc
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-1-23 13:14:21 | 显示全部楼层
还是得用标志位么。。我这边先试试。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-1-24 08:43:24 | 显示全部楼层
liujie136997963 发表于 2018-1-23 11:19
要么换自锁开关,要么当按键按下你给一个flag

不行。用标志位,发现判断标志位语句中,会耽误太长时间,定时器频率赋值会跟预期很大的误差。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-1-24 08:43:46 | 显示全部楼层
kcy 发表于 2018-1-23 11:06
你可以改下程序的写法,增加一些标志位,按下按键后改变,然后再去执行电机的动作,在不想动作的位置把标志 ...

不行。用标志位,发现判断标志位语句中,会耽误太长时间,定时器频率赋值会跟预期很大的误差。
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-24 09:44:24 | 显示全部楼层
在主循环中先做keyscanf。把扫描的按键结果赋值给你这三个if要判断的值。就可以了。//这样你不按按键,if中判断的值也不会变,那么你每次循环都可以进入if中。就不会一松手电机就停了。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-1-24 10:13:37 | 显示全部楼层
jinfeihan57 发表于 2018-1-24 09:44
在主循环中先做keyscanf。把扫描的按键结果赋值给你这三个if要判断的值。就可以了。//这样你不按按键,if中 ...

主要现在有这么个问题。每次判断,好像程序执行需要一定时间周期,耽误了赋值给定时器的值,然后速度就总是很低。达不到效果。
回复

使用道具 举报

13

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
883
金钱
883
注册时间
2017-8-7
在线时间
200 小时
发表于 2018-1-24 11:01:30 | 显示全部楼层
帮顶   
回复

使用道具 举报

5

主题

266

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1526
金钱
1526
注册时间
2016-7-20
在线时间
155 小时
发表于 2018-1-24 11:04:32 | 显示全部楼层
帮顶!
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-1-26 11:38:49 | 显示全部楼层
jinfeihan57 发表于 2018-1-24 14:41
如果是电机的速度更不上,很正常啊!这是你的电机的带宽不够,相应太慢。就是你的ADC已经给电机控制信号 ...

现在就是卡在这了。读取标志位也好,一直按住也好。 如果一直读取adc,赋值给定时器初值。程序就卡在这了,电机速度非常慢。   可能真得在电机算法那里想想办法了。
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-1-26 12:23:08 | 显示全部楼层
stm32sport 发表于 2018-1-26 11:38
现在就是卡在这了。读取标志位也好,一直按住也好。 如果一直读取adc,赋值给定时器初值。程序就卡在这了 ...

ADC 求了多少次平均啊??5次看看。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2017-8-17
在线时间
23 小时
 楼主| 发表于 2018-3-8 16:40:15 | 显示全部楼层
jinfeihan57 发表于 2018-1-26 12:23
ADC 求了多少次平均啊??5次看看。

现在是10次。改小也没用。它这个就是如果你一直打开adc的话,程序就一直在检测ad电压,电机那边就卡住了。速度会很慢。之前在51上也是有这种问题。无语。
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-3-9 14:43:16 | 显示全部楼层
stm32sport 发表于 2018-3-8 16:40
现在是10次。改小也没用。它这个就是如果你一直打开adc的话,程序就一直在检测ad电压,电机那边就卡住了 ...

这个问题是可以解决的,过去这么久。你的问题是什么我都乱了。可以私信或者其他途径,在描述一下你的问题和你现在的做法吗?或者把你的工程给我看看。
回复

使用道具 举报

8

主题

570

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2914
金钱
2914
注册时间
2016-5-13
在线时间
184 小时
发表于 2018-3-9 17:49:05 | 显示全部楼层
这种控制就是反馈调节的。最好用pid算法。
虽然不明白你们在说什么,但感觉很厉害的样子。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 17:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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