搜索
bottom↓
回复: 187

STM8下推式磁悬浮实验

  [复制链接]

出0入618汤圆

发表于 2009-12-8 03:51:08 | 显示全部楼层 |阅读模式

极简陋的模拟电路 (原文件名:磁悬浮(STM8 PWM).png)

源代码(STVD + Cosmic)ourdev_511866.zip(文件大小:53K) (原文件名:maglev_stm8.zip)

悬浮视频ourdev_511458.zip(文件大小:1.41M) (原文件名:maglev.zip)


电路基于ST三合一开发板的STM8S Mini Kit,ADC基准电压3.3V。
STM8使用内部16MHz RC振荡,分频比为1,核心频率16MHz。
ADC2时钟分频比为12,频率1.333MHz,工作在单次采样模式,采样时间为14 * 0.75µs + 7µs = 17.5µs,加上中断处理时间,采样率约为55KS/s。
TIM1时钟分频比为4,频率4MHz,计数器TOP值(ARR)为999,因此PWM频率为4KHz。

完成初始化后,主程序进入死循环,系统完全依赖中断服务例程运作。

设计要点详解:
1.ADC2采样完成(EOC)中断
<pre>/*
* ADC2 End Of Conversion interrupt handler
* Positions are filtered by a 7th-order moving average filter.
*/
@far @interrupt void ADC2_IRQHandler(void)
{
        static u8 xFilterPos, yFilterPos;
        static s16 xFilterBuf[8] = {0, 0, 0, 0, 0, 0, 0, 0};
        static s16 yFilterBuf[8] = {0, 0, 0, 0, 0, 0, 0, 0};

        s16 adcValue, acc = 0;
        u8 i;

        adcValue = ADC2_GetConversionValue();
        if (currentChannel == ADC2_CHANNEL_6)
        {
                xFilterBuf[xFilterPos & 7] = adcValue;
                xFilterPos++;
                for (i = 0; i < 8; i++)
                {
                        acc += xFilterBuf;
                }
                xPos = acc >> 3;
                currentChannel = ADC2_CHANNEL_7;
        }
        else
        {
                yFilterBuf[yFilterPos & 7] = adcValue;
                yFilterPos++;
                for (i = 0; i < 8; i++)
                {
                        acc += yFilterBuf;
                }
                yPos = acc >> 3;
                currentChannel = ADC2_CHANNEL_6;
        }

        // Switch the channel and start new conversion.
        ADC2_ClearFlag();
        ADC2_ConversionConfig(ADC2_CONVERSIONMODE_SINGLE, currentChannel, ADC2_ALIGN_RIGHT);
        ADC2_StartConversion();
}</pre>


EOC中断轮流采集CH6和CH7通道的数据,并对采样值进行7阶移动平均滤波,结果存放于xPos和yPos变量。


2.TIM1更新/溢出中断
<pre>/*
* TIM1 update/overflow interrupt handler
* This IRQ is executed every 250us.
*/
@far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
{
        static u8 direction;
        s16 xError, yError;
        s16 xPWM, yPWM;

        // Change X direction
        if (direction & X_DIRECTION_FLAG)
        {
                GPIO_WriteHigh(GPIOC, GPIO_PIN_3);
        }
        else
        {
                GPIO_WriteLow(GPIOC, GPIO_PIN_3);
        }

        // Change Y direction
        if (direction & Y_DIRECTION_FLAG)
        {
                GPIO_WriteHigh(GPIOC, GPIO_PIN_5);
        }
        else
        {
                GPIO_WriteLow(GPIOC, GPIO_PIN_5);
        }

        // PID calculation
        xError = xPID.targetValue - xPos;
        yError = yPID.targetValue - yPos;
        xPWM = calcPID(&xPID, xError);
        yPWM = calcPID(&yPID, yError);

        // Set the direction and OC polarity based on the PID output (takes effect on next PWM cycle)
        if (xPWM >= 0)
        {
                direction &= (u8) ~X_DIRECTION_FLAG;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_LOW);
        }
        else
        {
                direction |= X_DIRECTION_FLAG;
                xPWM = -xPWM;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_HIGH);
        }

        if (yPWM >= 0)
        {
                direction &= (u8) ~Y_DIRECTION_FLAG;
                TIM1_OC2PolarityConfig(TIM1_OCPOLARITY_LOW);
        }
        else
        {
                direction |= Y_DIRECTION_FLAG;
                yPWM = -yPWM;
                TIM1_OC2PolarityConfig(TIM1_OCPOLARITY_HIGH);
        }

        // Update the PWM (takes effect on next PWM cycle)
        TIM1_SetCompare1(xPWM);
        TIM1_SetCompare2(yPWM);

        TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
}</pre>


TIM1更新/溢出中断每个PWM周期开始时(250&micro;s)执行一次,每次执行会根据当前xPos和yPos进行PID运算和更新PWM占空比。10-bit ADC采样范围0~1023,因此PID的参考点设在中点511。
为了防止更新占空比造成当前PWM周期占空比不正常,输出比较器使用了预载功能,即更新会在下一个PWM周期才生效。
控制方向根据PID运算结果的符号来判断,保存在direction变量中,在下一个PWM周期才对应更新GPIO的输出状态,与PWM占空比更新同步。

PWM控制时序如下图(只画了X轴,Y轴同理):

PWM时序 (原文件名:磁悬浮(PWM时序).png)
当PID输出为正数时,PC3输出低电平,PC1/TIM1_CC1输出高电平有效的PWM脉冲。
当PID输出为负数时,PC3输出高电平,PC1/TIM1_CC1输出低电平有效的PWM脉冲,图中T3为占空比20%的PWM,T4为占空比40%的反向输出PWM。
结合L293D,图中T1, T2周期输出占空比20%的正向PWM至线圈,而T3, T4周期分别输出20%和40%占空比的反向PWM至线圈,从而实现双向磁场控制。


3.PID参数
<pre>        xPID.Kp = 4;
        xPID.Ki = 0;
        xPID.Kd = 30;
        xPID.integrationError = 0;
        xPID.prevError = 0;
        xPID.targetValue = 511;</pre>


由上面的代码可见,本系统只使用了PD控制,Ki为0,积分项不参与计算。Kp, Kd的值需要根据悬浮物的质量调整,整定方法可参考有关资料,这里就不详述了。


4.霍尔采样电路
霍尔采样电路采用了2片有源线性霍尔UGN3503,后接一级运放反相放大器,放大倍数为30倍,并且由一个10K多圈电位器调整输出中点电平。
运放和霍尔使用5V单电源供电,UGN3503的输出中点电压约2.5V,运放LM324输出电压范围约50mV~3.6V,因此STM8的ADC参考电压使用3.3V,分别调整10K电位器使LM324输出1.65V,此时STM8的ADC采样结果应该接近511,误差虽然越小越好,但不需要绝对准确(霍尔、运放都有温漂,不可能绝对准确),一般调整至480~550范围内即可。


5.硬件安装

线圈及霍尔安装 (原文件名:磁悬浮(线圈及霍尔安装).png)
每组两个线圈同名端相连(即反向串接)。霍尔置于4个线圈中间的空隙,高度约在线圈中部,需注意霍尔作用面应位于线圈中轴线上,不应采用图中虚线标示的安装方式,否则会造成定位误差。
磁环置于电路板下面,需要注意的是磁环的放置会影响霍尔输出,因此运放输出中点调节最好配合磁环定位同时调节。



呼,终于写完了。实用的设计,程序还需要加入有无悬浮物的判断,加入可调速旋转功能,PID最好加入自整定甚至模糊逻辑以应对不同质量的悬浮物和温漂等不确定因素,等等等等……
下推式磁悬浮实验算是暂时告一段落,在找到合适的铁心之前,先这样了。
希望以上内容能对各位一直以来关注磁悬浮板块的网友有一定的帮助,期待看到更多成功的作品!

出0入0汤圆

发表于 2018-6-16 10:07:14 | 显示全部楼层
之前关注了想自己做,PCB图画完了,选材后发现成本有点高,,,

出0入0汤圆

发表于 2016-3-24 13:53:46 | 显示全部楼层
好帖、该成为精华

出0入0汤圆

发表于 2016-2-4 05:45:35 来自手机 | 显示全部楼层
标记,磁悬浮。

出0入0汤圆

发表于 2016-1-30 10:24:25 | 显示全部楼层
好贴,做个磁悬浮地球仪吧

出0入618汤圆

 楼主| 发表于 2016-1-29 23:03:34 | 显示全部楼层
gmyu 发表于 2016-1-29 21:33
悄悄的问一句,大师后来为什么不给磁悬浮收个尾?您这个帖子应该是磁悬浮diy的转折点,如果后面优化应该 ...

思路讲明白就够了,没什么好收尾的,什么都做好了还有啥意思。

出0入4汤圆

发表于 2016-1-29 21:33:22 | 显示全部楼层
gzhuli 发表于 2016-1-29 21:23
看你有没有设置OCxPE位了,如果OCxPE=0是实时更新的。

悄悄的问一句,大师后来为什么不给磁悬浮收个尾?您这个帖子应该是磁悬浮diy的转折点,如果后面优化应该可以做一些事情。感觉你只是开了个头就算了。

我找论坛的朋友买了线圈,自己拼了个STM32的电路,现在也飘起来了,只是感觉没啥理论支持,手头东西有限,没特别的玩头了。

出0入618汤圆

 楼主| 发表于 2016-1-29 21:23:28 | 显示全部楼层
gmyu 发表于 2016-1-29 21:08
thanks!原来你的pwm每个周期都在做PID。
我用STM32做一次PID大约160uS,而PWM得周期大约40uS。大约4个周 ...

看你有没有设置OCxPE位了,如果OCxPE=0是实时更新的。

出0入4汤圆

发表于 2016-1-29 21:08:49 | 显示全部楼层
gzhuli 发表于 2016-1-29 20:13
STM8的比较寄存器更新后下个周期才正式生效,所以计算完PID并写入比较寄存器,下次中断才更新GPIO。 ...

thanks!原来你的pwm每个周期都在做PID。
我用STM32做一次PID大约160uS,而PWM得周期大约40uS。大约4个周期,请问STM32的有没这个特性?如果有,第一个周期就是错的啦。现在能工作是后3个周期在起作用。

出0入618汤圆

 楼主| 发表于 2016-1-29 20:13:12 | 显示全部楼层
gmyu 发表于 2016-1-29 16:46
大师,你这段程序,不是很明白,请教一下,如果上次的方向和这次的PID结果相反,这个不就不成立了么? 为什 ...

STM8的比较寄存器更新后下个周期才正式生效,所以计算完PID并写入比较寄存器,下次中断才更新GPIO。

出0入0汤圆

发表于 2016-1-29 16:59:19 | 显示全部楼层
mark 有机会学习一下

出0入4汤圆

发表于 2016-1-29 16:46:43 | 显示全部楼层
大师,你这段程序,不是很明白,请教一下,如果上次的方向和这次的PID结果相反,这个不就不成立了么? 为什么不是先计算PID,然后根据PID正负来设置IO,数值来设置PWM。
===================================================
当PID输出为正数时,PC3输出低电平,PC1/TIM1_CC1输出高电平有效的PWM脉冲。=
===================================================

1. 根据上次的方向标志设置IO口,
2. 然后PID,
3. 最后根据PID的结果设置PWM。

if (direction & X_DIRECTION_FLAG)
        {
                GPIO_WriteHigh(GPIOC, GPIO_PIN_3);
        }
        else
        {
                GPIO_WriteLow(GPIOC, GPIO_PIN_3);
        }

        // Change Y direction
        if (direction & Y_DIRECTION_FLAG)
        {
                GPIO_WriteHigh(GPIOC, GPIO_PIN_5);
        }
        else
        {
                GPIO_WriteLow(GPIOC, GPIO_PIN_5);
        }

        // PID calculation
        xError = xPID.targetValue - xPos;
        yError = yPID.targetValue - yPos;
        xPWM = calcPID(&xPID, xError);
        yPWM = calcPID(&yPID, yError);

        // Set the direction and OC polarity based on the PID output (takes effect on next PWM cycle)
        if (xPWM >= 0)
        {
                direction &= (u8) ~X_DIRECTION_FLAG;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_LOW);
        }

出0入0汤圆

发表于 2016-1-19 21:43:31 | 显示全部楼层
不知道我啥时候才有空做。。。。。。

出0入0汤圆

发表于 2015-9-1 09:01:31 | 显示全部楼层
咕前辈,我再另一个帖子呼唤你,请移步http://www.amobbs.com/thread-5631412-1-1.html

出0入0汤圆

发表于 2015-5-18 11:45:12 | 显示全部楼层
赞一个   

出0入4汤圆

发表于 2015-5-18 10:33:10 | 显示全部楼层
大师你好 第一张图片Proteus里的那个STM8的元件你自己画的吗 内部的驱动程序怎么写的?能否教一下 谢谢

出0入0汤圆

发表于 2015-4-23 21:27:51 | 显示全部楼层
求看视屏~!

出0入36汤圆

发表于 2014-12-31 15:50:46 | 显示全部楼层
楼主,弄个实物看看哦~

出0入8汤圆

发表于 2014-12-16 16:00:18 | 显示全部楼层
不枉此生23 发表于 2014-12-16 00:44
我想加入, 现在还行么

恩恩,我已经玩完了,X宝上直接有卖整套diy器件的,你搜磁悬浮线圈,就能找到!

出0入0汤圆

发表于 2014-12-16 11:14:43 | 显示全部楼层
文件打不开啊

出0入0汤圆

发表于 2014-12-16 09:18:14 | 显示全部楼层
不错的东西,收藏中

出0入0汤圆

发表于 2014-12-16 08:38:29 | 显示全部楼层
好帖子,必须mark

出0入0汤圆

发表于 2014-12-16 01:11:20 | 显示全部楼层
gzhuli 发表于 2014-12-16 00:52
会吸到旁边去。
两个磁铁就好像两个球上下叠在一起的感觉,不扶着就会随机向一边滑落。 ...

原理:
转盘外型为中央低、边缘高的圆锥台,
旋转的陀螺是一个包覆一层塑料的磁铁。
当陀螺转动时,具有磁性的陀螺由圆锥台外缘往中心旋转,由于转盘底下有线圈,因此线圈依照楞次定律产生感应电流,当感应电流达到一定值以后,三极管导通,包在线圈内的铁芯形成暂时磁铁,其中铁芯之上端形成磁极,其对具有磁性的陀螺磁极部分〈依安培右手定则得知〉,形成同性相斥的现象,使旋转中之磁铁陀螺被推了一把,转速加快。
实际上陀螺由转盘的圆锥台上缘旋转至圆锥中央较低处,因为势能转换成动能的关系,所以陀螺旋转速会加快,因促发了感应电流,又将圆锥台上的旋转陀螺推一把,速度就变更快,而陀螺再由较低的转盘圆锥台中央依惯性又旋转到较高的圆锥台边缘,速度又因此减慢(动能转换成势能,又受摩擦损耗了一部分动能)。
陀螺从转盘最高点到圆锥台低处,又返回转盘最高点的现象不停的周而复始,就是转不停陀螺的奥秘。
-----
想让你看看底盘有什么东西。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入618汤圆

 楼主| 发表于 2014-12-16 00:52:15 | 显示全部楼层
不枉此生23 发表于 2014-12-16 00:43
那这样 掉电 ,浮子 就会弹开?

会吸到旁边去。
两个磁铁就好像两个球上下叠在一起的感觉,不扶着就会随机向一边滑落。

出0入0汤圆

发表于 2014-12-16 00:44:21 | 显示全部楼层
opiviqo 发表于 2014-7-17 21:27
我也开始动手了,还有想一起玩的么?可以一起来加入讨论!~~~

我想加入, 现在还行么

出0入0汤圆

发表于 2014-12-16 00:43:46 | 显示全部楼层
gzhuli 发表于 2013-12-1 00:17
提供斥力。四个线圈只控制浮子水平位置。

那这样 掉电 ,浮子 就会弹开?

出0入618汤圆

 楼主| 发表于 2014-12-16 00:07:13 | 显示全部楼层
不枉此生23 发表于 2014-12-15 23:11
想问下,每个线圈的电感量是多少。

没测过。

出0入0汤圆

发表于 2014-12-15 23:11:54 | 显示全部楼层
想问下,每个线圈的电感量是多少。

出0入0汤圆

发表于 2014-11-24 18:59:07 | 显示全部楼层
顶                    

出0入0汤圆

发表于 2014-11-13 17:56:06 | 显示全部楼层
线圈电流方向切换的原理是什么呢?

出0入0汤圆

发表于 2014-10-18 10:09:43 | 显示全部楼层
gzhuli 发表于 2012-10-5 13:22
不知道这样够详细了没有?

够牛X的,都成易语言了!

出0入8汤圆

发表于 2014-7-17 21:27:12 | 显示全部楼层
我也开始动手了,还有想一起玩的么?可以一起来加入讨论!~~~

出0入0汤圆

发表于 2014-6-16 13:57:52 | 显示全部楼层
这帖子看了好久了,最近在学AVR,网购一个ATmage8a的最小系统,下定决心了要做一个,请各位支持下

出0入0汤圆

发表于 2014-2-19 22:08:20 | 显示全部楼层
mark!!!!!!!!!!!!!!!!!!!!1

出0入0汤圆

发表于 2013-12-18 17:18:05 | 显示全部楼层
mark ,以后学习

出0入0汤圆

发表于 2013-12-8 23:27:07 | 显示全部楼层

莫大大,求救啊,这是怎么回事啊?http://www.amobbs.com/forum.php? ... p;page=1#pid7162886

出0入0汤圆

发表于 2013-12-5 22:20:39 | 显示全部楼层
gzhuli 发表于 2013-12-1 00:17
提供斥力。四个线圈只控制浮子水平位置。

额,现在我都搞不清哪个是N哪个是S了。现在我悬空浮子,用手握着,感觉在某个高度能有点平衡的感觉,但是放下来的时候,浮子的下半平面和黑色环形磁铁的上表面是相互吸引的,这样对不对啊?
还有就是程序里面有点不解,说下我的理解,楼主帮忙看下对不对:程序大致可分为x、y两个方向控制,在一个方向上(例如x方向上),当浮子位于正中央时,误差应该是最小的,pwm波形输出有效占空比为0,当有一点偏移时,pwm出现有效输出,偏移越大,占空比越大,磁场产生的力量推动浮子回复到中央位置。当浮子越过中央位置进入相反方向时,极性发生改变,生成反向的力,使浮子再次归正。

出0入618汤圆

 楼主| 发表于 2013-12-1 00:17:03 | 显示全部楼层
neozoic 发表于 2013-11-30 23:11
黑色环形磁铁是对浮子提供磁力还是吸力啊?是不是应该和浮子相对的那个面相互吸引啊?然后四个线圈受单片机 ...

提供斥力。四个线圈只控制浮子水平位置。

出0入0汤圆

发表于 2013-11-30 23:45:32 | 显示全部楼层
沙发。。。

出0入0汤圆

发表于 2013-11-30 23:11:04 | 显示全部楼层
黑色环形磁铁是对浮子提供磁力还是吸力啊?是不是应该和浮子相对的那个面相互吸引啊?然后四个线圈受单片机控制总是提供给浮子斥力,以此平衡?还是反过来呢?

出0入0汤圆

发表于 2013-11-27 08:32:23 | 显示全部楼层
gzhuli 发表于 2013-11-24 17:47
看帖要仔细,30楼有详细的线圈参数。

我的错,下次一定仔细看,嘿嘿

出0入0汤圆

发表于 2013-11-24 22:13:00 | 显示全部楼层
gzhuli 发表于 2013-11-24 20:52
不会,垂直方向是重力和磁铁斥力平衡,不需要控制。

之前看过帖子里有张图片,它是把霍尔弯了90度朝上了。
当时我以为测高度的呢。

出0入618汤圆

 楼主| 发表于 2013-11-24 20:52:13 | 显示全部楼层
gujiamao_love 发表于 2013-11-24 20:34
那上下不用控制吗?就是高度方向上不会恍吗?

不会,垂直方向是重力和磁铁斥力平衡,不需要控制。

出0入0汤圆

发表于 2013-11-24 20:34:18 | 显示全部楼层
gzhuli 发表于 2011-4-12 22:15
回复【44楼】KTearXu
请问楼主 为什么相对两个线圈要反向接呢?这样磁场方向不是反了吗,浮子不是弹到一边 ...

那上下不用控制吗?就是高度方向上不会恍吗?

出0入618汤圆

 楼主| 发表于 2013-11-24 17:47:37 | 显示全部楼层
neozoic 发表于 2013-10-9 17:56
楼主好,俺也想做个,不知道线圈那个怎么整,想问一下用多粗的线,多少圈比较合适啊,或者说什么样的线圈比 ...

看帖要仔细,30楼有详细的线圈参数。

出0入0汤圆

发表于 2013-11-24 17:07:28 | 显示全部楼层
Mark!!!

出0入0汤圆

发表于 2013-11-24 16:45:14 | 显示全部楼层

正在做,问题一堆堆的,头大死了

出0入0汤圆

发表于 2013-11-24 14:46:53 | 显示全部楼层
neozoic 发表于 2013-10-9 17:56
楼主好,俺也想做个,不知道线圈那个怎么整,想问一下用多粗的线,多少圈比较合适啊,或者说什么样的线圈比 ...

你做了吗?

出0入0汤圆

发表于 2013-11-10 11:36:32 | 显示全部楼层
顶一下        

出0入0汤圆

发表于 2013-10-9 17:56:31 | 显示全部楼层
楼主好,俺也想做个,不知道线圈那个怎么整,想问一下用多粗的线,多少圈比较合适啊,或者说什么样的线圈比较好使啊?

出0入0汤圆

发表于 2013-7-10 09:21:25 | 显示全部楼层
mark,标记。

出0入0汤圆

发表于 2013-7-10 09:19:32 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2013-7-10 09:13:56 | 显示全部楼层
pid参数总也凑不对,检查,ad是有的,pwm也是可以反响输出的,就是pid总也凑不对,仅仅有p的时候还能停2,3秒

出0入0汤圆

发表于 2013-7-8 15:16:04 | 显示全部楼层
请教下楼主,怎么让它旋转呢?
chengli008@126.com

出0入0汤圆

发表于 2013-7-8 11:23:05 | 显示全部楼层
郁闷,楼主是不是弃楼了,呵呵;我的联系方式chengli008@126.com

出0入0汤圆

发表于 2013-7-8 11:09:00 | 显示全部楼层
楼主,您好,我改为103,使用5V的基准电压,但是一直抖动,P已经=70了,是什么问题呢

出0入0汤圆

发表于 2013-7-2 08:56:50 | 显示全部楼层
mark,GOoooooooooooooooooood

出0入0汤圆

发表于 2013-6-21 11:08:00 | 显示全部楼层
楼主是用stm8f207做的,改为stm8s103,主频降低一半,可以的吗

出0入0汤圆

发表于 2013-6-17 09:27:23 | 显示全部楼层
这个太酷了,顶一个。楼主很棒。

出0入0汤圆

发表于 2013-4-10 21:01:36 | 显示全部楼层
学习一下。。。

出0入0汤圆

发表于 2013-3-29 16:01:40 | 显示全部楼层
czjiuyu 发表于 2012-3-26 19:09
这位兄弟,能否告知电话或打我电话18961496183 陈立,我们公司正在研发一套奶粉铁盖的自动输送系统,国外有 ...

正在研发一套奶粉铁盖的自动输送系统,国外有采用磁悬浮分开盖子的,应该可以

出0入0汤圆

发表于 2013-1-24 15:00:57 | 显示全部楼层
有点儿意思。下回玩玩儿

出0入0汤圆

发表于 2013-1-23 11:01:50 | 显示全部楼层
看了视频,觉得很棒,祝贺楼主

出0入0汤圆

发表于 2013-1-5 16:23:25 | 显示全部楼层
由于霍尔元件只能检测到平面内的磁场,那么检测垂直方向上的悬浮物的位置的磁场时,是不是要把霍尔元件掰开与引脚垂直?

出0入0汤圆

发表于 2012-11-7 15:13:49 | 显示全部楼层
收藏                                             

出0入0汤圆

发表于 2012-10-20 13:57:33 | 显示全部楼层
好东西,继续完善!

出0入0汤圆

发表于 2012-10-20 13:47:22 | 显示全部楼层
mark一下

出0入618汤圆

 楼主| 发表于 2012-10-20 13:08:43 | 显示全部楼层
小不点儿 发表于 2012-10-20 11:47
那PID算法中的参数设定是怎么试出来的呢?粘磁铁的胶用硅胶(塑料胶)可以吗? ...

自己动手试试吧。

出0入0汤圆

发表于 2012-10-20 11:47:35 | 显示全部楼层
那PID算法中的参数设定是怎么试出来的呢?粘磁铁的胶用硅胶(塑料胶)可以吗?

出0入618汤圆

 楼主| 发表于 2012-10-20 11:43:52 | 显示全部楼层
小不点儿 发表于 2012-10-18 21:38
请问定时器输出PWM的时候计数模式是连续计数模式吗,还是增计数模式?

不清楚什么叫连续计数模式和增计数模式。

出0入0汤圆

发表于 2012-10-18 21:38:49 | 显示全部楼层
请问定时器输出PWM的时候计数模式是连续计数模式吗,还是增计数模式?

出0入618汤圆

 楼主| 发表于 2012-10-17 00:40:42 | 显示全部楼层
本帖最后由 gzhuli 于 2012-10-17 00:43 编辑
小不点儿 发表于 2012-10-17 00:15
那您给出的那个pwm控制时序图是什么意思呢?     l293d不是in1和in2分别为1.0时接的电机才会正转吗,把in ...


图是用来说明PWM占空比和极性的关系的。L293D的接法自己看手册吧,我已经说得很清楚了。3144是不是线性霍尔也是自己看手册吧。UGN3503淘宝搜到255个结果,不算不好买吧,阿莫邮购部也有卖,我的就是在阿莫这里买的。
我感觉你连datasheet都不会看,急不来的,如果你想学点东西那就从基础学起,三五个月肯定能做出来。如果你很急着用,建议你买一个成品,淘宝268就有一套。

出0入0汤圆

发表于 2012-10-17 00:15:12 来自手机 | 显示全部楼层
gzhuli 发表于 2012-10-16 23:30 几个问题一起回复吧: 1.PWM输出是经过PID控制的,有关PID的资料很多,自己查。 2.L293D是独立的4个半桥 ...

那您给出的那个pwm控制时序图是什么意思呢?     l293d不是in1和in2分别为1.0时接的电机才会正转吗,把in3和in1接到一起也可以吗?3144不是线性的霍尔元件吗,ugn3503不是很好买,请问可以拿什么型号代替呢?   

出0入618汤圆

 楼主| 发表于 2012-10-16 23:30:46 | 显示全部楼层
小不点儿 发表于 2012-10-15 15:44
好吧,我一直在看书 但是时间比较仓促想要尽快将这个做好。。。。
请问输出的PWM的规律是什么  在编程的时 ...

几个问题一起回复吧:
1.PWM输出是经过PID控制的,有关PID的资料很多,自己查。
2.L293D是独立的4个半桥,任意两个都可以组合成H桥,你喜欢3和6,11和14也可以。
3.调试当然是接上电源,单片机烧好程序,然后拿着磁铁放上去调了,还能怎么调?
4.必须用线性霍尔。

出0入0汤圆

发表于 2012-10-16 20:29:18 | 显示全部楼层
还有,木有找到UGN3503,用3144代替可以吗/

出0入0汤圆

发表于 2012-10-16 20:02:51 | 显示全部楼层
mark~~~~~~~~~~~~~

出0入0汤圆

发表于 2012-10-16 19:59:28 | 显示全部楼层
我怎么看都看不懂电路图里那个L293D的引脚不是3和6应该串联,11和14串联吗?
还有,硬件连接好后,如何调试呢?
望尽快回复~

出0入0汤圆

发表于 2012-10-15 15:44:07 | 显示全部楼层
好吧,我一直在看书 但是时间比较仓促想要尽快将这个做好。。。。
请问输出的PWM的规律是什么  在编程的时候怎么决定PWM的输出呢

出0入618汤圆

 楼主| 发表于 2012-10-5 14:21:50 | 显示全部楼层
小不点儿 发表于 2012-10-5 14:10
真心很谢谢您,希望不要嫌我麻烦。。。

不是嫌你麻烦,只不过太基础的东西是不可能教你的,回答一些控制原理和算法问题还可以,代码级的问题实在是没时间去手把手教。

出0入618汤圆

 楼主| 发表于 2012-10-5 14:16:25 | 显示全部楼层
小不点儿 发表于 2012-10-5 14:09
谢谢谢谢!!相当详细啊~~
但是,这些我都通过百度自己查出来了。。。怎么说呢,您能不能用 ...

代码都看不懂那我真的没办法帮忙了,自己打好基础吧,连最简单的移动平均滤波算法都不知道,我要教会你恐怕得写几万字够出本书了,还不如你自己去书店找些书来看。

出0入0汤圆

发表于 2012-10-5 14:10:13 | 显示全部楼层
gzhuli 发表于 2012-10-5 13:22
不知道这样够详细了没有?

真心很谢谢您,希望不要嫌我麻烦。。。

出0入0汤圆

发表于 2012-10-5 14:09:15 | 显示全部楼层
gzhuli 发表于 2012-10-5 13:22
不知道这样够详细了没有?

谢谢谢谢!!相当详细啊~~
但是,这些我都通过百度自己查出来了。。。怎么说呢,您能不能用讲解一下语句的意思呢,就是比您一楼提供的讲解更详细一些的,又比最后一楼的讲解更简洁一些的~~我废话怎么这么多的。。。
比如说AD模块那里,七阶平均滤波是通过那个函数调用完成的呢,acc 的作用又是什么呢?

出0入618汤圆

 楼主| 发表于 2012-10-5 13:22:46 | 显示全部楼层
小不点儿 发表于 2012-10-5 12:03
初学者,正在用MSP430做,在学习STM8的源代码,但是进展很慢,希望您能给出AD以及TIMI(也就是您公 ...
  1. 如果 (xPWM 大于等于 0)
  2. {
  3.   方向 与等于 取反X_方向_标记;
  4.   定时器1_输出比较器1极性设置(定时器1_输出比较器极性_低);
  5. }
  6. 否则
  7. {
  8.   方向 或等于 X_方向_标记;
  9.   xPWM 等于 负xPWM;
  10.   定时器1_输出比较器1极性设置(定时器1_输出比较器极性_高);
  11. }
复制代码
不知道这样够详细了没有?

出0入0汤圆

发表于 2012-10-5 12:03:45 | 显示全部楼层
gzhuli 发表于 2012-10-5 11:28
代码下面不是有解释么?

初学者,正在用MSP430做,在学习STM8的源代码,但是进展很慢,希望您能给出AD以及TIMI(也就是您公布的程序)的源代码的详细讲解,就当是扫盲,普及一下C语言编程的知识,please~~~~

出0入618汤圆

 楼主| 发表于 2012-10-5 11:28:20 | 显示全部楼层
小不点儿 发表于 2012-10-5 10:47
请问源代码中的这段什么意思?
if (xPWM >= 0)
        {

代码下面不是有解释么?

出0入0汤圆

发表于 2012-10-5 10:47:40 | 显示全部楼层
gzhuli 发表于 2012-10-1 11:28
铁心在环形磁铁的中心,那里的磁场比上面的磁铁强。

请问源代码中的这段什么意思?
if (xPWM >= 0)
        {
                direction &= (u8) ~X_DIRECTION_FLAG;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_LOW);
        }
        else
        {
                direction |= X_DIRECTION_FLAG;
                xPWM = -xPWM;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_HIGH);
        }

出0入0汤圆

发表于 2012-10-4 23:55:58 来自手机 | 显示全部楼层
公司最近也买了一个样品,这个帖正好可以学习下~

出0入0汤圆

发表于 2012-10-4 23:47:04 | 显示全部楼层
请问源代码中的这段什么意思?
if (xPWM >= 0)
        {
                direction &= (u8) ~X_DIRECTION_FLAG;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_LOW);
        }
        else
        {
                direction |= X_DIRECTION_FLAG;
                xPWM = -xPWM;
                TIM1_OC1PolarityConfig(TIM1_OCPOLARITY_HIGH);
        }

出0入618汤圆

 楼主| 发表于 2012-10-1 11:28:10 | 显示全部楼层
zjz6106 发表于 2012-10-1 00:24
加铁心后,磁铁不就被铁心吸下去了吗?

铁心在环形磁铁的中心,那里的磁场比上面的磁铁强。

出0入0汤圆

发表于 2012-10-1 00:24:24 | 显示全部楼层
gzhuli 发表于 2012-9-24 00:27
1.多少是会受线圈影响,因为不可能刚好放在正中心,误差总是有的,这可以不管,PID能应付。
2.加铁心是必 ...

加铁心后,磁铁不就被铁心吸下去了吗?

出0入618汤圆

 楼主| 发表于 2012-9-24 23:02:39 | 显示全部楼层
振荡就减小I,加大D。
快的方法就是采集输入和输出波形,推出传递函数,再按照传递函数来取PID参数。

出0入0汤圆

发表于 2012-9-24 22:22:57 | 显示全部楼层
gzhuli 发表于 2012-9-24 11:48
范围是很小,5mm左右吧。

调了一天,基本可以了,最多的时候能停留20秒左右,后来会震动,然后飞出去了。 请问PID参数只能一个个试么?有没有什么快得方法!?

出0入618汤圆

 楼主| 发表于 2012-9-24 11:48:05 | 显示全部楼层
SHIYOULAN 发表于 2012-9-24 11:43
好的。。我做的东西,感觉悬浮物在环形磁铁的正上方的活动范围太小了!! 很容易被永磁铁拉出去!是不是 ...

范围是很小,5mm左右吧。

出0入0汤圆

发表于 2012-9-24 11:43:31 | 显示全部楼层
gzhuli 发表于 2012-9-24 00:30
不一定在中央,不在中央的话各个方向的控制力不同,需要不同的PID参数。 ...

好的。。我做的东西,感觉悬浮物在环形磁铁的正上方的活动范围太小了!! 很容易被永磁铁拉出去!是不是我的PID参数没调好?麻烦你帮我看一下!

出0入618汤圆

 楼主| 发表于 2012-9-24 00:35:14 | 显示全部楼层
甘子贤 发表于 2012-5-22 19:04
还想请教下老师, 线圈下面的加的磁环如果换成一个个圆形磁铁,那么圆形磁铁的N, S极 要怎么放置呢? 是所 ...

我没做过这种,感觉应该是全部朝上。

出0入618汤圆

 楼主| 发表于 2012-9-24 00:34:20 | 显示全部楼层
xiaob5809469 发表于 2012-7-29 12:06
我现在连理论家都不是,单纯小白一个,需要学的还有好多好多。请问楼主,我应该从哪来学起?我是大学生,专 ...

做其实不难,肯动手一定能做出来。如果想从中学点东西就从自动控制理论学起,无论是模拟方案还是数字方案,无非都是一个闭环反馈控制过程而已。

出0入618汤圆

 楼主| 发表于 2012-9-24 00:30:05 | 显示全部楼层
SHIYOULAN 发表于 2012-9-23 23:57
你好啊!! 请问四个线圈一定最好要在环形磁铁中央吗?不在的话会不会产生不好的影响? ...

不一定在中央,不在中央的话各个方向的控制力不同,需要不同的PID参数。

出0入618汤圆

 楼主| 发表于 2012-9-24 00:27:41 | 显示全部楼层
zjz6106 发表于 2012-9-18 13:03
我现在在做下推式磁悬浮。有两个问题:1.霍尔元件放在线圈的中心位置(高度),但是仍然会受线圈磁场影响; ...

1.多少是会受线圈影响,因为不可能刚好放在正中心,误差总是有的,这可以不管,PID能应付。
2.加铁心是必须的,空心线圈磁场发散,控制距离很短。

出0入0汤圆

发表于 2012-9-23 23:57:45 | 显示全部楼层
你好啊!! 请问四个线圈一定最好要在环形磁铁中央吗?不在的话会不会产生不好的影响?

出0入0汤圆

发表于 2012-9-18 13:03:13 | 显示全部楼层
本帖最后由 zjz6106 于 2012-9-18 13:05 编辑

我现在在做下推式磁悬浮。有两个问题:1.霍尔元件放在线圈的中心位置(高度),但是仍然会受线圈磁场影响;2.线圈电流达到1A,800匝,0.27mm的线,仍然感觉对磁铁横向的拉力不足。请问这是为什么?还有漂浮物用不用加配重?谢谢啦

出0入0汤圆

发表于 2012-8-1 10:00:44 | 显示全部楼层
和楼上一样,真心求教~~谢谢了
xiaohaier@stu.snnu.edu.cn
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 12:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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