fengke 发表于 2021-3-31 16:30

疯壳AI开源无人机ADC(摇杆控制)

<div class='showpostmsg'><ul>
        <li>摇杆</li>
</ul>

<h3>1.1摇杆简介</h3>

<p>摇杆由于符合人体工学、操作简单,广泛应用于各类的玩具中,例如遥控飞机、遥控小车等。如下图所示为摇杆模块的实物图。</p>

<p><img alt="" height="223" src="https://oscimg.oschina.net/oscnet/up-5891ebcffcc3dcc9a3be97b3fcb08105bbc.JPEG" width="156" /></p>

<h3>1.2摇杆原理</h3>

<p>摇杆的根本无非就是两个电位器,也就是常说的滑动变阻器,一个电位器对应摇杆的上下方向,而另一个电位器则对应左右方向。</p>

<p>摇杆的引脚一端接上电、一端接上地,另外一端就负责采集电压的变化值即可,判断摇杆是往哪个方向拨动。</p>

<h2>二、ADC</h2>

<h3>2.1 ADC简介</h3>

<p>ADC(Analog-to-Digital Converter),模数转换器即A/D转换器,或简称ADC,通常是指一个将<a href="https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%25E6%25A8%25A1%25E6%258B%259F%25E4%25BF%25A1%25E5%258F%25B7%2F706796" rel="nofollow" target="_blank">模拟信号</a>转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。</p>

<p>那么什么是模拟量、数字量呢?模拟量是指变量在一定范围连续变化的量;</p>

<p>数字量是物理量的一种,它们的变化在时间上是不连续的,总是发生在一系列离散的瞬间。这一类物理量叫做&nbsp;数字量。如下图所示为数字量与模拟量的对比图。</p>

<p><img height="200" src="https://oscimg.oschina.net/oscnet/up-06eac541a3ba0e16b7f42bbd70b29531fff.JPEG" width="482" /></p>

<p>那么把模拟信号准换成数字信号的过程就称为ADC模数转换。</p>

<p>模数转换器的种类很多,按工作原理的不同,可分成间接ADC和直接ADC。间接ADC是先将输入模拟电压转换成时间或频率,然后再把这些中间量转换成数字量,常用的有双积分型ADC。直接ADC则直接转换成数字量,常用的有并联比较型ADC和逐次逼近型ADC。</p>

<p>并联比较型ADC:采用各量级同时并行比较,各位输出码也是同时并行产生,所以转换速度快。并联比较型ADC的缺点是成本高、功耗大。</p>

<p>逐次逼近型ADC:它产生一系列比较电压VR,但它是逐个产生比较电压,逐次与输入电压分别比较,以逐渐逼近的方式进行模数转换的。它比并联比较型ADC的转换速度慢,比双积分型ADC要快得多,属于中速ADC器件。</p>

<p>双积分型ADC:它先对输入采样电压和基准电压进行两次积分,获得与采样电压平均值成正比的时间间隔,同时用计数器对标准时钟脉冲计数。它的优点是抗干扰能力强,稳定性好;主要缺点是转换速度低。</p>

<p>ADC常用的技术指标有:</p>

<p>(1)采样精度&nbsp;:即分辨率,一般有8位、10位、12位、16位等;</p>

<p>(2)&nbsp;转换时间&nbsp;:即每次采样所需的时间,表征 ADC 的转换速度,与 ADC 的时钟频率、采样周期、转换周期有关;</p>

<p>(3)工作电压&nbsp;:需要注意 ADC 的工作电压范围、能否直接测量负电压等;</p>

<p>(4)ADC类型&nbsp;:如上面所提到的,ADC 有多种类型,不同类型的 ADC 有不同的性能极限。</p>

<h3>2.2 STM32的ADC</h3>

<p>STM 32拥有1~3个ADC ,这些ADC可以独立使用,也可以使用双重模式(提高采样率)。STM 32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的A / D转换可以单次、连续、扫描或间断模式执行。</p>

<p>ADC 的结果可以左对齐或右对齐方式存储在16位数据寄存器中。(因为在这里ADC是12位的,还有四位没有用到,所以存在左/右对齐的方式)。</p>

<p>STM32F103系列的ADC外部通道和引脚对应的关系,如下图所示。</p>

<table border="1" cellspacing="0">
        <tbody>
                <tr>
                        <td>
                        <p>通道</p>
                        </td>
                        <td>
                        <p>ADC1</p>
                        </td>
                        <td>
                        <p>ADC2</p>
                        </td>
                        <td>
                        <p>ADC3</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道0</p>
                        </td>
                        <td>
                        <p>PA0</p>
                        </td>
                        <td>
                        <p>PA0</p>
                        </td>
                        <td>
                        <p>PA0</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道1</p>
                        </td>
                        <td>
                        <p>PA1</p>
                        </td>
                        <td>
                        <p>PA1</p>
                        </td>
                        <td>
                        <p>PA1</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道2</p>
                        </td>
                        <td>
                        <p>PA2</p>
                        </td>
                        <td>
                        <p>PA2</p>
                        </td>
                        <td>
                        <p>PA2</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道3</p>
                        </td>
                        <td>
                        <p>PA3</p>
                        </td>
                        <td>
                        <p>PA3</p>
                        </td>
                        <td>
                        <p>PA3</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道4</p>
                        </td>
                        <td>
                        <p>PA4</p>
                        </td>
                        <td>
                        <p>PA4</p>
                        </td>
                        <td>
                        <p>PF6</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道5</p>
                        </td>
                        <td>
                        <p>PA5</p>
                        </td>
                        <td>
                        <p>PA5</p>
                        </td>
                        <td>
                        <p>PF7</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道6</p>
                        </td>
                        <td>
                        <p>PA6</p>
                        </td>
                        <td>
                        <p>PA6</p>
                        </td>
                        <td>
                        <p>PF8</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道7</p>
                        </td>
                        <td>
                        <p>PA7</p>
                        </td>
                        <td>
                        <p>PA7</p>
                        </td>
                        <td>
                        <p>PF9</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道8</p>
                        </td>
                        <td>
                        <p>PB0</p>
                        </td>
                        <td>
                        <p>PB0</p>
                        </td>
                        <td>
                        <p>PF10</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道9</p>
                        </td>
                        <td>
                        <p>PB1</p>
                        </td>
                        <td>
                        <p>PB1</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道10</p>
                        </td>
                        <td>
                        <p>PC0</p>
                        </td>
                        <td>
                        <p>PC0</p>
                        </td>
                        <td>
                        <p>PC0</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道11</p>
                        </td>
                        <td>
                        <p>PC1</p>
                        </td>
                        <td>
                        <p>PC1</p>
                        </td>
                        <td>
                        <p>PC1</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道12</p>
                        </td>
                        <td>
                        <p>PC2</p>
                        </td>
                        <td>
                        <p>PC2</p>
                        </td>
                        <td>
                        <p>PC2</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道13</p>
                        </td>
                        <td>
                        <p>PC3</p>
                        </td>
                        <td>
                        <p>PC3</p>
                        </td>
                        <td>
                        <p>PC3</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道14</p>
                        </td>
                        <td>
                        <p>PC4</p>
                        </td>
                        <td>
                        <p>PC4</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道15</p>
                        </td>
                        <td>
                        <p>PC5</p>
                        </td>
                        <td>
                        <p>PC5</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道16</p>
                        </td>
                        <td>
                        <p>温度传感器</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>通道17</p>
                        </td>
                        <td>
                        <p>内部参照电压</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                        <td>
                        <p>无</p>
                        </td>
                </tr>
        </tbody>
</table>

<h3>2.3 ADC寄存器</h3>

<p>STM32的ADC相关寄存器较多,这里只讲几个比较重要的寄存器。</p>

<p>(1)ADC_CR1:模数转换控制寄存器1,如下图所示:</p>

<p><img height="105" src="https://oscimg.oschina.net/oscnet/up-28ea61534e6e15541b02d451ebb405d3676.JPEG" width="554" /></p>

<p>其中RES为分辨率设置位,等于00时设置ADC为12位,等于01时设置ADC为10位,10时设置ADC为8位,11时设置ADC为6位。</p>

<p>(2)ADC_CR2:模数转换控制寄存器2,如下图所示:</p>

<p><img height="107" src="https://oscimg.oschina.net/oscnet/up-a53b7d5f39d7b383414dda5e95d96768500.JPEG" width="553" /></p>

<p>其中ALIGN为数据对齐位,为0数据右对齐,为1数据左对齐;CONT为连续转换设置位,为0单次转换,为1连续转换;ADON为ADC转换使能位,关闭ADC转换,为1开启ADC转换。</p>

<p>(3)ADC_DR:模数转换数据寄存器,规则序列寄存器中的AD转化结果都将被存在这个寄存器中,而注入寄存器的转换结果被存储在ADC_DR中,如下图所示:</p>

<p><img height="90" src="https://oscimg.oschina.net/oscnet/up-90159656f603e61de450683c5d895329379.JPEG" width="553" /></p>

<p>其中DATA中存放转换的数据。</p>

<h3>2.4 ADC摇杆控制实验</h3>

<p>本节实验的内容是使用遥控手柄上的左摇杆控制遥控手柄上的电源指示灯、cocobit编程模式指示灯、连接无人机指示灯以及紧急降落指示灯。</p>

<p>左摇杆往拨电亮电源指示灯、往下拨点亮cocobit编程指示灯、往左拨点亮紧急降落指示灯、往右拨点亮连接无人机指示灯。这里采用了ADC1多路通道规则DMA采集的方式。左摇杆的ADC接线原理图如下图所示。</p>

<p><img height="179" src="https://oscimg.oschina.net/oscnet/up-acbfe0c3d6cb1bdc10ba4e1c060d6794f8c.JPEG" width="131" /><img height="406" src="https://oscimg.oschina.net/oscnet/up-98a5dce77ece27d085e84ec52380bec5211.JPEG" width="500" /></p>

<p>实验中会用到LED,其配置可以参考遥控器开发基础教程《GPIO》一节。整体的编写代码的思路如下表所示:</p>

<p>代码思路</p>

<table border="1" cellspacing="0">
        <tbody>
                <tr>
                        <td>
                        <p>1</p>
                        </td>
                        <td>
                        <p>管脚配置</p>
                        </td>
                        <td>
                        <ol>
                                <li>定义结构体;</li>
                                <li>使能时钟(ADC+GPIO时钟);</li>
                                <li>填充结构体;</li>
                                <li>装载结构体。</li>
                        </ol>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>2</p>
                        </td>
                        <td>
                        <p>ADC的DMA配置</p>
                        </td>
                        <td>
                        <ol>
                                <li>定义结构体;</li>
                                <li>填充结构体;</li>
                                <li>装载结构体;</li>
                        </ol>

                        <p>4、使能DMA。</p>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>3</p>
                        </td>
                        <td>
                        <p>ADC初始化配置</p>
                        </td>
                        <td>
                        <ol>
                                <li>定义结构体;</li>
                                <li>复位ADC;</li>
                                <li>使能内部电压;</li>
                                <li>填充结构体;</li>
                                <li>装载结构体;</li>
                                <li>配置ADC时钟;</li>
                                <li>设置ADC规则转换通道;</li>
                                <li>使能ADC的DMA传输;</li>
                                <li>校准ADC;</li>
                                <li>使能软件触发ADC。</li>
                        </ol>
                        </td>
                </tr>
                <tr>
                        <td>
                        <p>4</p>
                        </td>
                        <td>
                        <p>逻辑处理</p>
                        </td>
                        <td>
                        <p>1、获取ADC值、处理ADC值。</p>
                        </td>
                </tr>
        </tbody>
</table>

<p>ADC的初始化代码如下。</p>

<p><img height="230" src="https://oscimg.oschina.net/oscnet/up-27cd9c8c92053d9cded4cfccedb9abd1df4.JPEG" width="465" /></p>

<p><img height="233" src="https://oscimg.oschina.net/oscnet/up-f8623a35db68e5c364bdc57c0a06f5d4aca.JPEG" width="454" /></p>

<p><img height="203" src="https://oscimg.oschina.net/oscnet/up-83c8aff964aa43997d5a20eb7500af97ec6.JPEG" width="476" /></p>

<p>ADC处理是在主循环中完成的,其代码如下图所示。</p>

<p><img height="243" src="https://oscimg.oschina.net/oscnet/up-538fb4b4030da4ac6e7207270c1e1e37ff2.JPEG" width="459" /></p>

<p>&nbsp;</p>

<p>如下图所示,左摇杆往左拨,紧急降落指示灯亮起。</p>

<p><img height="440" src="https://oscimg.oschina.net/oscnet/up-522b9baae18fb1a8bd1f118d4139d00e4c7.JPEG" width="554" /></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

h472438470 发表于 2021-9-12 13:13

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td>
                        <p>疯壳AI开源无人机 &nbsp; &nbsp; &nbsp;感谢楼主的整个xi整个系列系统性分享 &nbsp; 谢谢</p>
                        </td>
                </tr>
        </tbody>
</table>
页: [1]
查看完整版本: 疯壳AI开源无人机ADC(摇杆控制)