版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北理工大学信息学院 摘要 iii2功能与设计方案2.1系统功能要求在环境监测功能方面,温度传感器的配备须精确监测水温变化,误差保持在±0.5℃的控制要求;水质传感器对水体的浊度状态进行检测,异常水质可以及时发现;水位传感器可对水位变化进行监测,避免水位过低现象的生成;光敏传感器提供对环境光照强度的检测依据,补光的控制同样可以借助它进行。在控制调节功能方面,系统需对水温状态进行监测并自动管理加热装置,使水温保持在设定的范围内,水体浊度状态需与换水或增氧机构相关,系统根据具体状态启动相关装置。水位状态同样需监测,注水装置的控制需依据监测结果,光照强度状态需进行评估后,自动完成LED补光的调节,喂食功能的处理需提供定时或手动形式,这些功能在系统中都需进行具体设定。人机交互部分,OLED显示屏对各监测参数进行实时显示;环境异常时,声光报警器提醒用户;控制按钮为用户提供操作系统方便;WIFI通信模块实现数据传输至移动终端,达到远程监控。2.2系统设计方案鱼缸水环境控制系统整体架构采用模块化设计思路,分为传感检测,控制处理,执行调节和显示通信四大部分。传感检测部分完成对鱼缸水环境的监测任务,控制处理部分进行相关环境调节的逻辑处理,执行调节部分依据处理结果对水环境施加调节,显示通信部分完成用户与整体控制模块的通信并进行环境显示。传感检测部分包含DS18B20温度传感器,水位传感器,浊度传感器和光照传感器,这些传感器负责对环境参数进行数据采集,每个传感器都使用专用接口与控制处理部分连接,各种传感器在检测中完成任务后,就可迅速地对相关环境数据进行读写采集,使数据可由控制处理部分进行读写并处理。控制处理部分以STM32F103单片机为核心,同时包含必要的电源电路和辅助电路。传感器数据经GPIO,ADC,定时器等接口输入单片机,处理之后依据预设的阈值执行具体控制策略,驱动执行部分完成相应工作。执行调节部分包含加热与换水模块,喂食和增氧/换水机构,以及LED补光灯,加热和换水模块借助两个继电器控制,喂食和增氧/换水机构使用两个舵机进行控制,单片机指令对这些执行器进行工作控制,鱼缸环境参数的修正工作也离不开这些执行器。通信显示部分包含OLED显示屏,蜂鸣器报警器和ESP32WIFI模块。环境参数通过OLED显示屏进行实时性显示;异常时,蜂鸣器可进行报警;ESP32通过UART接口将数据传输至WIFI模块,之后再发送至手机APP,远程监控功能在数据传输中完成实现。图2.1系统硬件模块工作框图2.3器件方案对比2.3.1单片机的选择方案一:STC89C52单片机属于8051系列,开发环境和学习资料相当多,该芯片包含8KFlash程序存储器,256字节RAM,3个16位定时器/计数器,具有32个I/O口,价格低廉,约在5-10元,适合简单控制任务。主频一般为11.0592MHz,单芯片处理能力有限,硬件不支持浮点运算,外设和I/O口较少,ADC需外接芯片才能采集模拟信号。总线带宽小,难以支持复杂数据处理和多任务,DMA传输不支持,CPU负载偏重,功耗较大,电池供电应用中存在缺陷,这些都对具体场景的使用存在较大局限性。方案二:STM32F103单片机属于ARMCortex-M3架构的32位微控制器,主频达到72MHz,处理能力为STC89C52的数倍,它集成了多种外设,16个通道的12位ADC,多个硬件定时器和I2C,SPI,USART等通信接口,DMA传输也支持。存储容量大,Flash达到128KB,RAM达到20KB,该单片机支持多种低功耗模式,睡眠电流可低至2μA。开发环境成熟,Keel,IAR等多种IDE都支持,还可使用STM32CubeMX图形化配置工具简化开发,单芯片价格虽然约15-25元略高,但综合性价比优于STC89C52。图2.2STM32F主芯片综合考虑控制精度、本系统在运算能力,外设丰富度和开发难度等多因素下,选用如图2.1STM32F103单片机作为控制核心。强大的处理能力可应对多传感器数据处理需求,内置ADC支持模拟信号的直接采集,丰富的定时器资源可为PWM生成和舵机控制使用,多个通信接口为连接OLED和WIFI模块等外设提高了开发的可连接性与控制能力。2.3.2温度检测模块的选型方案一:AD590温度传感器是一款电流输出型器件,绝对温度与输出电流成正比,每1K的温度变化可使电流产生1μA的偏移,测量范围为-55℃至+150℃,精度为±0.5℃。该器件线性度较高且灵敏度强,抗干扰能力强,长电缆传输时具有较高的信号质量,由于电流输出的特征,需要通过外接精密电阻把电流信号转换成电压信号,再进行ADC采集。这在电路设计中增加了复杂性,同时,AD590单个器件价格较高,约在15-25元,双电源供电也提升了对电源设计的难度要求。方案二:DS18B20是一款数字温度传感器,使用单总线(1-Wire)通信协议,直接输出数字形式的温度数据,该传感器测量温度范围为-55℃至+125℃,分辨率可依据编程控制在9-12位(0.5℃至0.0625℃)。出厂前已预设无需校准,精度达到±0.5℃,它只需一根数据线即可与微控制器进行通信,简化了电路设计要求。同时支持多点测温,多个传感器可并联在一根总线上工作;宽电压范围(3.0V-5.5V)适应不同电源环境;防水封装版本存在,适合与水环境相关应用,价格在8-15元范围,传感器通信速度较慢且需要特定时序控制,这是缺点。图2.3温度传感器对比之后,本系统选择使用如图2.3DS18B20温度传感器。数字输出特性使它在信号传输时避免了模拟信号的干扰问题,其防水封装直接适用于水温检测,单总线协议简化了接线,测量精度满足鱼缸温度监测需求,相对经济也价格合适。2.3.3显示模块的选型方案一:LCD1602显示模块基于HD44780控制器,提供16列×2行的字符显示,且使用成熟,资料丰富,接口标准化,通常需6-8个I/O口进行控制,该模块在强光下内容清晰可见,支持自定义字符,操作电压5V,功耗约2-3mA,价格经济在10-15元,然而显示内容仅支持字符,无法处理图形,对比度受温度影响较大需手动调节,且占用较多I/O口,显示效果单一,视觉体验不丰富。方案二:OLED显示模块,采用有机发光二极管技术,无需背光源,本系统选用0.96寸,128×64像素分辨率的OLED模块,I2C或SPI接口进行控制,仅需2-4个I/O口。自发光特性使暗环境下清晰可读,视角宽,对比度超高,响应速度快达到微秒级,支持图形与文字混合显示,界面丰富,体积小且厚度约1.5mm,适合空间受限场景。功耗在全亮时约20mA,部分显示时更低,工作电压为3.3V-5V,可适配不同控制器,价格约15-25元,使用寿命较LCD短,强光下可视性较差。图2.4OLED显示模块综合考虑系统显示需求、本系统在接口资源占用,显示效果与功耗等具体要求下,选用如图2.4OLED显示模块,其自发光特性与高对比度在室内鱼缸观察中效果适合,紧凑尺寸便于集成,电路设计也因为低I/O占用压力的降低简化,图形显示能力为参数展示提供直观形式,这些特性在系统设计中都可助力使用环境与显示效果的优化。2.3.4浑浊度传感器的选型浑浊度是衡量水质清澈度的重要指标,直接影响水生生物的生存环境。在鱼缸水环境控制系统中,浑浊度传感器的选型需综合考虑测量精度、稳定性、响应速度、抗污染能力和成本等因素。经过对市场主流浑浊度传感器的对比分析,本设计选用DFRobotGravity系列模拟浑浊度传感器(SEN0189)。该传感器采用光散射原理,通过检测水中悬浮颗粒对光的散射强度来测量浑浊度,测量范围为0-3000NTU,分辨率达0.5NTU,满足鱼缸水环境监测的精度要求。传感器采用316L不锈钢外壳和高品质光学树脂封装,具有良好的防水性能和耐腐蚀性,能在长期水下工作环境中保持稳定。此外,其模拟输出方式(0-4.5V)与主控制器兼容性好,便于信号采集和处理。该传感器的供电电压为5V,功耗低(小于25mA),适合电池供电的便携系统;工作温度范围为5-90℃,覆盖了鱼缸环境的正常温度变化范围。与同类产品相比,SEN0189传感器具有结构紧凑(直径为28mm)、防污染设计和性价比高等优势,更适合本系统的需求。图2.5浑浊度传感器2.3.5水位检测器的选型鱼缸水位的准确监测对防止溢水等安全隐患具有重要意义。水位检测器需具备防水、耐腐蚀、安装方便等特点。本设计选用XKC-Y25-T12V非接触式水位检测传感器模块。该传感器基于电容检测原理,无需接触水面即可检测水位变化,避免了电极腐蚀和水质污染问题。检测距离为5-8mm,能够透过鱼缸玻璃进行检测,安装便捷且不影响水族箱美观。传感器采用PBT材料封装,防水等级达IP67,适合长期使用于潮湿环境。XKC-Y25-T12V模块工作电压为5-24VDC,适配多种供电方案;输出方式为数字信号(高/低电平),直接连接至微控制器的数字输入端口,无需复杂的信号调理电路。传感器具有自动温度补偿功能,能在5-60℃的温度范围内保持稳定工作,抗干扰能力强。与传统的浮球式、电极式水位检测器相比,该传感器无机械运动部件,寿命长,维护成本低,更适合本系统的长期稳定运行需求。图2.6浑浊度传感器2.3.6按键硬件的选型用户交互界面是系统易用性的关键因素,按键作为基本的输入设备,其选型直接影响用户体验。本设计选用AlpsAlpineSKRRAAE010型轻触开关作为系统的操作按键。该按键采用表面贴装(SMD)设计,尺寸紧凑(6×6×5mm),便于PCB布局;同时具有良好的触感反馈,按压力为160±50gf,行程为0.25±0.1mm,使用寿命达到30万次,满足频繁操作的需求。按键采用镀金触点设计,接触电阻小于100mΩ,确保信号传输稳定可靠;绝缘电阻大于100MΩ,有效防止漏电。工作温度范围为-40℃至+85℃,适应各种环境条件。此外,该按键具有IPX7级防水性能,能够抵抗水汽和溅水的侵入,适合安装在鱼缸周围的潮湿环境。为提升系统的人机交互体验,本设计将配置5个功能按键:电源键、模式切换键、参数增减键和确认键。每个按键上方将设置LED指示灯,提供直观的视觉反馈。按键排列采用人体工程学设计,间距适中(不小于15mm),便于操作。此外,按键电路采用RC滤波和软件消抖处理,有效解决按键抖动问题,提高输入可靠性。图2.7独立按键2.4本章小结本章对鱼缸水环境控制系统功能要求,设计方案及硬件模块选择进行详细说明,系统以监测环境与自动调节作为关键功能,采用模块化设计方案,通过四大部分协同构成完整控制系统,对比分析之后,确定STM32F103单片机,DS18B20温度传感器与OLED显示模块为关键硬件组件,这些硬件不仅满足技术需求,系统的经济性与实用性也同时达到保证。表2-1系统控制参数序号控制参数相应控制1水温根据设定值的通过传感器测量出水温2水位根据设定值通过传感器器测出水位,进行换水3灯光测出光照,进行报警,报警灯闪烁4喂食通过舵机进行喂食5系统的测试3系统的硬件电路设计3.1STM32F103C8T6单片机STM32F103单片机在系统中作为控制核心,完成各模块的协调,传感器数据处理和控制算法执行等任务。电路设计部分包含时钟,复位,电源和外设接口等电路。时钟电路外部采用8MHz晶振,通过PLL倍频后达到72MHz,作为系统主频,两个22pF陶瓷电容与晶振并联,保证了振荡的稳定。复位电路由10kΩ上拉电阻和104电容组成,可提供上电自动复位功能,按键触发手动复位同样可以完成,电源电路以AMS1117-3.3V稳压芯片将5V输入转换为3.3V输出供电,使用10μF电解电容和104陶瓷电容进行滤波,确保电源纹波在50mV的控制要求下。接口设计中,光敏传感器与水位传感器分别通过ADC通道PA0和PA1连接,采用12位分辨率完成模拟信号的采集,温度传感器DS18B20与PB5连接,借助GPIO模拟单总线协议进行通信。浊度传感器与PB4连接,通过GPIO读取数字电平状态,TIM3模块的两个PWM输出通道(PA6,PA7)为两个舵机的控制通道。LED补光模块,继电器控制信号与蜂鸣器分别连接至PC13,PC14和PC15,通过GPIO控制高低电平信号,OLED显示模块通过硬件I2C接口连接,使用PB6-SCL与PB7-SDA通信,ESP32WIFI模块通过USART1(PA9-TX,PA10-RX)进行串行通信,完成相关信号的处理。[8]抗干扰设计在电源线路中增加滤波电容,信号线与电源和地线布局时避免交叉现象,关键信号增强上拉电阻,ADC输入端增加RC滤波电路处理高频噪声,且电路板双层设计中顶层主要布置信号线,底层为电源和地平面,系统稳定性提高,相关措施堆砌在设计中,增强抗干扰能力[7]。图3.1STM32F103C8T6单片机接线情况3.2ESP8266无线模块ESP8266无线模块在本鱼缸控制系统中担任数据传输关键角色,负责将监测参数实时发送至移动终端,实现远程监控功能。该模块采用ESP-01S版本,具备体积小、功耗低、性价比高的特点,能够满足本系统无线通信需求。ESP8266模块通过USART1接口与STM32F103单片机连接。具体连接方式为:ESP8266的RXD引脚连接STM32的PA9(USART1_TX),TXD引脚连接STM32的PA10(USART1_RX),VCC接3.3V电源,GND接地。由于ESP8266工作电流可达300mA,系统设计了独立电源通道供电,避免对单片机造成供电干扰。电路中加入100μF大容量电解电容和104陶瓷电容滤波,保证模块启动瞬间大电流需求[9]。ESP8266的CH_PD引脚接3.3V,保持模块持续工作状态。ESP8266无线模块的应用使鱼缸控制系统具备了物联网功能,用户可随时随地查看鱼缸状态,提高了系统使用便捷性和鱼缸管理效率。图3.2ESP8266无线模块3.3浊度检测模块AZDM01浊度传感器被水质传感器模块采用,监测鱼缸水质状况,为增氧和换水功能提供决策依据,光电检测原理在该传感器中使用,红外发射管,光电接收管与信号处理电路组成它,水质清澈时,水体使光线透过并被接收管接收;水质浑浊时,悬浮物散射光线,接收管接收的光线就减弱。传感器电路包含模拟输出与数字输出两部分,模拟输出端输出0-3.3V的电压信号,反映浊度的强弱程度;数字输出端处理电压比较器后的信号,当浊度超过设定阈值时输出低电平,其他情况输出高电平,系统采用数字输出方式,通过调节传感器上的电位器设定触发阈值,满足不同鱼类对水质的要求。传感器的VCC端连接3.3V电源,GND端接地,数字输出端ZD_1与STM32的PB4引脚连接,系统通过读取PB4引脚电平状态对水质进行判断。高电平显示水质正常,低电平显示水质异常并需要处理,在水质异常时,不仅蜂鸣器报警激活,并且舵机B转到135度位置,模拟增氧和换水操作的逻辑也存在。水质判断存在复杂性特征,系统使用了带延时的判断机制,瞬态干扰就可避免误判;软件滤波算法也加入在连续多次采样确认之后动作触发,判断就愈加显示可靠性。该模块有效检测水质变化且灵敏度可以满足家庭鱼缸监测要求在测试中表明。图3.3浊度检测模块3.4水位检测模块水位传感器模块借助电阻式原理对鱼缸水位进行检测,避免水位降低对鱼类生存的不良结果,它由平行金属条组成,水位升高时,这些金属条被更多浸没,导体间电阻减小,输出电压变化与水位变化相应。鱼缸水位的监测就由这模块完成,低水位的风险也由它消除,金属条浸没使电阻和电压在变化中完成对水位的监测任务[10]。传感器电路设计中一端连接3.3V参考电压,另一端通过上拉电阻至地,输出端WATER_1与STM32的PA1引脚(ADC通道1)连接,STM32的12位ADC采集电压值后转换为0-99范围内的水位百分比,系统中阈值Water_MAX设定为50%,实际水位(ADC_cj2)低于阈值时继电器JDQ1闭合,启动水泵模拟注水;水位高于阈值时继电器断开,注水停止。图3.4水位检测模块3.5光照传感器模块光敏电阻实现光照强度检测,为LED补光功能提供控制依据。光照增强时,光敏电阻的特性为电阻减小,分压电路将电阻变化转换为电压变化。电路设计中包含简单分压结构,光敏电阻一端连接3.3V电源,另一端借助10kΩ固定电阻与地连接,中间的分压点GZQD_1输出电压信号至STM32的PA0引脚,这引脚为ADC通道0。STM32通过12位ADC对电压值进行采集后,依据计算公式转换为范围在0至99内的光照百分比数值,数值增加时,光照的强弱也越强。测试结果中,该光照传感器在室内环境中对光照变化的捕捉灵敏且准确,白天和夜间测量值的差异性明显。模块设计简单可靠,功耗低并保持长期稳定性,为自动补光提供了依据。图3.5光照检测模块3.6DS18B20温度传感器模块DS18B20温度检测模块对鱼缸水温进行精确测量,为温度控制提供数据依据。模块包含三部分:DS18B20温度传感器,上拉电阻和防水封装。DS18B20可采用TO-92封装或防水封装,防水型将芯片密封在金属管中,直接浸入水中使用也适合,数据线(DQ)连接至STM32的PB5引脚,同时通过一个4.7kΩ上拉电阻连接至3.3V电源,单总线信号完整性可确保,由于单总线协议存在特殊时序要求,数据交换通过精确延时函数实现。测温时系统先发送初始化脉冲,再触发温度转换命令(0x44),转换完成之后,通过读取命令(0xBE)获取温度寄存器的16位数据。低8位为整数部分,高8位包含符号与小数部分,借助位操作和移位处理计算实际温度,精度可保持在±0.5℃。为强化系统抗干扰性,DS18B20连接线采用屏蔽线并减少走线长度,数据处理通过多次采样取平均值应对偶发误差,模块设计中考虑安装便捷性,借助防水接头固定在鱼缸合适位置,测温结果准确且保持了鱼缸的美观性。图3.6DS18B20温度传感器模块3.7执行模块执行模块为根据监测结果调节鱼缸环境的执行单元,包含舵机控制单元,继电器控制单元与LED补光单元。主控制器指令为这些单元接收后,相应动作就可执行,环境参数改变在动作执行中完成。采用两个SG90微型舵机完成控制要求,分别负责喂食和增氧换水功能,舵机A连接在TIM3_CH1(PA6),对应喂食任务;舵机B连接在TIM3_CH2(PA7),对应增氧换水任务。舵机的驱动力矩由独立5V供电提供,单片机直接输出PWM信号进行控制,PWM信号频率50Hz,占空比范围在5%-10%时,对应舵机角度可达到0°-180°范围,信号控制下舵机角度与占空比保持了直接的对应性,50Hz频率提供足够控制的信号频率以使舵机反应,同时独立供电减少对单片机的供电要求。喂食机构设计时,舵机A的默认位置为90°;按下喂食按键,舵机旋转至180°打开食物通道,5秒后自动回至90°位置关闭通道,避免过量喂食。增氧/换水机构中,舵机B默认位于45°位置;水质异常时,舵机转动到135°位置启动增氧/换水功能,水质恢复正常后自动回至45°位置。继电器控制单元包含两个5V单刀双掷继电器,分别对加热和换水功能进行控制,JDQ1继电器与PC14引脚连接,完成换水功能的控制,JDQ2继电器与PC15引脚连接,控制加热功能。单片机GPIO无法直接驱动继电器,每个继电器控制电路都增加一个三极管开关电路,电流放大使用NPN三极管,比如S8050,同时并联续流二极管(1N4007)在继电器线圈中,吸收反电动势保护电路结构。LED补光单元使用高亮度白光灯带,控制信号与PC13引脚连接,驱动电路采用MOSFET开关设计,低导通电阻的P沟道MOSFET如AO3401作为开关元件,确保电流充足,这些LED安装于鱼缸上方,光线均匀地覆盖水面,光照充足。图3.7继电器模块实际接线图3.8OLED显示模块OLED显示模块使用的是0.96寸单色显示屏,分辨率128×64像素,任务为实时输出系统监测的环境参数。该模块基于SSD1306芯片,采用I2C通信接口,仅需两根信号线,完成与STM32的信号通信,降低对I/O资源的使用。在电路的连接中,OLED的SCL与SDA分别连接至STM32的PB6和PB7引脚,这对应的是I2C1接口,模块工作时电压为3.3V,由单片机直接供电,电流消耗在20mA,设置I2C通信速率400kHz,显示刷新需求可满足。内容布局经过精心设计后,"鱼缸控制系统"中文标题显示在顶部;中部区域的参数分行为光照值(Light),水位值(Water),浊度状态(TURB)和温度值(TEMP);各参数附带数值并标识单位。为强化辨识,浊度状态采用文字形式直观表达,"Normal"或"Anomaly"可直观显示水质状况,文字信息使状态的识别不言而喻。[11]图3.8OLED模块实际接线图3.9本章小结本章对鱼缸水环境控制系统硬件设计进行具体说明,STM32F103单片机核心控制电路,DS18B20温度检测模块,OLED显示模块,水质传感器模块等各部分共同构成完整的监测与控制系统,各模块功能存在明确的定位,接口匹配也合理,电路设计考虑了技术性能需求和成本控制,家庭用户可以使用,模块包含水位传感器模块,光照传感器模块,执行模块和报警模块,各部分设计都依据匹配性要求进行。
4系统的软件设计4.1软件部分本系统软件开发使用KeilMDKVersion5环境,ARM公司官方推荐的嵌入式开发平台,专为Cortex-M系列微控制器优化。项目管理,代码编辑和编译调试功能完善的该工具,为相关开发任务的进行。Keil5包含ARM编译器(ARMCC),汇编与链接工具,可进行C/C++语言的开发,它提供多种软件组件库,CMSIS(Cortex微控制器软件接口标准)库,STM32HAL(硬件抽象层)库,底层驱动开发的简化得以完成。内置设备模拟器为多种,也支持JTAG/SWD调试器,这使代码调试方便,诸多分析工具如性能分析器,执行分析器,代码覆盖率分析器等得以在Keil5中集成,程序优化性能可借助这些得以完成[12]。图4.1Keel_5软件界面本项目基于STM32CubeMX生成的HAL库工程使用Keil5进行创建,保留驱动框架原有内容,同时开发应用层代码,项目结构具体为:Core文件夹包含主程序代码;Drivers文件夹包含STM32HAL库和CMSIS库;应用层代码中存在传感器驱动,显示控制与按键处理等模块,编译优化选择O2级别达到速度与代码大小的平衡,同时启用链接时优化选项降低程序体积。开发阶段借助Keil5的调试功能,利用ST-Link调试器与STM32微控制器连接后,完成代码单步执行,变量监视和断点调试等任务,开发效率实现大幅增加。[13]图4.1Keil_5软件界面4.2软件程序的设计4.2.1主程序流程图图4.2系统逻辑流程图系统的主流程图如图4.2所示,主程序流程可称系统运行的骨架,整体工作逻辑都控制在它手里,系统上电后就进入初始化阶段,对系统时钟进行72MHz的配置,GPIO,DMA,ADC,定时器和USART外设都进行初始化,OLED显示屏初始化后显示系统标题,舵机初始位置也完成配置,DS18B20温度传感器初始化,USART接收中断启用,初始化完成后,主体工作流程就进入无限循环中。主循环中,系统检测Key1按键状态,判断是否启动功能,当Key1_Folgers为1时,系统工作依次进行:定期读取DS18B20温度值,通过ADC采集光照和水位值,检测浊度传感器状态。传感器数据控制LED补光,继电器状态和舵机动作,更新OLED显示,通过USART向WIFI模块发送数据,流程每100ms执行一次,确保系统实时响应环境变化。喂食控制逻辑在程序中具体设计为:按下Key2后,喂食功能触发,计时变量z设为50(等值5秒),舵机A保持在180度位置;倒计时结束后,舵机回到90度停止位置。主程序比较监测值与预设阈值之后,实现自动调节环境参数,无需人工干预即可维持鱼缸环境的稳定。4.2.2按键子程序流程图图4.3按键子程序流程图按键子程序借助状态检测方式完成用户按键输入的处理,同时实现控制任务,包含喂食功能和状态切换。主程序循环直接对按键电平状态进行检测,无需单独使用中断服务程序。总开关按键(Key1)的程序检测电平变化,当检测到按键按下(KEY_1==0),执行Key1_Folgers=1-Key1_Folgers操作实现状态切换,系统开关功能在等待按键释放阶段(while(KEY_1==0))避免了对按键的多次识别[14]。系统工作启动时Key1_Folgers为1,停止时为0,一键控制运行状态的实现包含在按键状态的切换逻辑中。喂食按键(Key2)的检测机制可采用类似处理:按键按下时切换Key2_Folgers状态并设置计时变量z为50对应5秒;主循环中,z不为0控制舵机A工作于180度位置,z为0回到90度停止位置。主循环每次递减计时变量实现定时喂食功能。按键子程序设计中对按键抖动现象进行处理,通过软件延迟方式消除机械抖动的不良影响,按键检测可靠性可达到提高。简洁且高效特征在程序结构中存在,及时响应特征同样不缺乏,人机交互体验的可靠性也提高。4.2.3温度检测子程序介绍图4.4温度子程序流程图DS18B20在初始化时,程序先发送复位脉冲,具体为将总线拉低超过480μs,之后释放,等待15-60μs检测传感器存在脉冲,传感器存在脉冲为60-240μs的低电平,确认传感器存在之后,发送跳过ROM命令(0xCC)与温度转换命令(0x44),温度转换就触发。在确保转换完成的750ms等待后,程序再次初始化总线,跳过ROM并发送读取暂存器命令(0xBE),随后程序读取9字节数据,前两字节包含温度值,采用移位和位操作处理温度数据:低字节与高字节组合形成16位有符号整数,再乘以0.0625转换为实际温度值,精度达到0.0625℃。[15]为增加可靠性,温度读取采用重试机制处理失败现象,具体为尝试进行最多3次读取后仍失败则返回前一有效温度,子程序以乘以10的整数形式返回温度,主程序在除以10之后显示结果,精度保持在小数点后1位,测试显示该子程序在精度与响应性层次都达到要求,可应对鱼缸温控需求。4.3本章小结本章对鱼缸水环境控制系统软件设计进行说明,Keil5开发环境的特点与应用,主程序流程,温度检测子程序和按键处理子程序实现原理包含在内容中,模块化思想在软件设计中应用,各功能程序独立性增加,调试与维护的可实现性也提高。状态机设计在主程序中采用,按键实现控制系统工作状态,环境监测与自动调节功能在程序设计中完成,整体软件架构具体特征不言自名,代码高效且稳定,系统功能实现支持可靠。5系统的测试5系统的测试5.1实物安装过程5.1.1主控板安装选择一块合适的鱼缸模型,如图5.1将STM3F16主控板用双面胶固定在鱼缸后表面部分,安装稳固以防后续使用过程中松动。需要注意的是,主控班的接口方向应便于连接后续各个元器件。
开发板准备:确保开发板的供电、下载调试接口等功能正常。将开发板放置在干净、防静电的工作台上,避免因静电损坏芯片。5.1.2传感器安装温度传感器,浊度传感器,水位传感器,光照传感器等四个传感器分别整齐美观的固定在鱼缸上,便于检测鱼缸内环境的各个参数。温度传感器DS18B20选择合适的位置,温度传感器要安装在鱼缸内稳定且能准确反映整体水温的位置,防止靠近温度变化较大的位置。一般可将传感器用防水保护套包裹后,通过鱼线或小支架悬挂在鱼缸中部靠下的位置。5.1.3显示屏安装安装位置:OLED显示屏可一安装在鱼缸模型正面便于观察的位置,使用双面胶或螺丝将显示屏固定在合适的支架或面板上。接线:OLED显示屏通常支持I²C或SPI通信方式,根据所选的通信方式,将显示屏的电源引脚(VCC)、接地引脚(GND)、时钟引脚(SCL或SCK)、数据引脚(SDA或MOSI、MISO)等连接到开发板对应的引脚,确保通信正常,显示屏能正确显示系统信息。5.1.4源模块安装将电源模块安装在鱼缸外通风良好、散热方便的位置,使用双面胶固定。根据系统各硬件的供电需求,将电源模块的输出端分别连接到主控芯片、传感器、执行器、显示模块等。注意区分不同电压等级的输出,确保连接正确,避免因电压不匹配损坏硬件。将电源模块的输入电源线连接到合适的适配器,确保输入电压稳定且符合电源模块的要求。在连接输入电源前,再次检查所有硬件的接线是否正确,避免通电后发生短路等故障。5.1.5硬件整合:将安装好的各个硬件模块按照设计布局,合理放置在鱼缸外,整理好各类连接线,使用双面胶固定,避免线缆杂乱影响系统稳定性和后期维护。在完成所有硬件安装和线路连接后,再次仔细检查接线是否正确,确认无误后接通电源。观察各个硬件模块的工作状态,如主控芯片指示灯是否正常亮起,传感器是否能正确采集数据,执行器能否响应控制信号,显示模块是否正常显示等。使用万用表等工具检测关键节点的电压、电流等参数,确保系统工作在正常范围内。若在调试过程中发现异常,如某个传感器数据不准确、执行器不动作等,需按照从硬件到软件的顺序逐步排查问题。检查硬件连接是否松动、损坏,传感器是否校准正确,程序代码是否存在逻辑错误等,针对具体问题进行修复,直至系统各功能正常运行。5.1软硬件调试系统调试包含两个阶段,分为单元测试与集成测试,各功能模块的独立性与协同性都可借助调试过程进行确保。STM32单片机与ST-Link调试器连接后,结合Keil5工具完成调试过程。单元测试阶段逐一确认各功能模块的正确性。对GPIO控制部分进行测试时,编写程序使LED与继电器开关,并测量电平确认输出信号;在ADC采集测试部分,借助可调电压源模拟传感器输出并验证采样精度与计算结果的符合性;PWM输出测试使用示波器检查舵机控制信号,观察频率稳定在50Hz且占空比可以调;DS18B20通信部分测试中,逻辑分析仪捕获单总线信号验证通信时序;OLED显示测试编写程序输出不同内容检查显示效果与刷新速率;USART通信测试时使用调试助手观察数据接收,确认格式和传输速率正确[16]。集成测试阶段将各模块组合为完整系统并模拟真实使用场景,温度控制测试时,通过加热水或添加冷水改变水温,验证系统对加热装置的检测与控制。水质控制测试时,向水中添加少量杂质模拟水质变化,检验浊度检测功能与舵机B反应,水位控制测试中,通过添加或排出水改变水位,测试水位检测与继电器控制逻辑。光照控制测试时,改变环境光强度,检查光敏检测和LED补光功能,喂食功能测试中,多次按下喂食按键后,验证舵机A动作稳定性,WIFI通信测试时,使用手机APP接收系统发送的数据,确认数据完整准确调试阶段发现多项问题并完成解决,温度读取异常问题通过增加错误重试机制进行处理,ADC采样波动现象借助多次采样平均滤波算法优化,舵机控制精度不足的缺陷通过PWM生成代码优化提升了角度控制精度,OLED显示的闪烁问题修改刷新逻辑后改善,按键检测抖动现象使用软件防抖算法后完成优化。[17]全面调试之后,系统各功能模块运行稳定,响应迅速且测量精度达到要求,动作执行可靠,可保持长时间的稳定运行,设计预期在结果中都具体化。5.2实物展示经过大量测试和调试,系统的各项功能均运行正常,监测数据准确、控制响应迅速,能够可靠地维持鱼缸内的理想环境。系统开启以后,OLED显示屏上将会实时显示当前温度(DS18B20)+浊度(等级)+光敏值(0-99)+水位(0-99)用于用户交互。测试了本系统的自动补光功能。此时设定的光照强度阈值是50,当检测到光照强度大于50时,会自动关闭补光灯,当检测到光照强度小于40时则会自动开启补光灯。5.3本章小结本章对鱼缸水环境控制系统的软硬件调试过程与实物展示进行详细说明,单元测试和集成测试验证了各功能模块的可靠工作,整体性能也保持稳定。实物展示中说明了系统各组件的安装位置和连接方式,显示了实际应用效果,测试结果表明,系统能够准确监测鱼缸环境参数并及时响应异常,自动调节环境状态,实现了鱼缸管理自动化,设计预期目标也达到。结论结论结论本文完成了一种基于STM32F103单片机的鱼缸水环境控制系统设计与实现,该系统通过多种传感器对鱼缸环境参数进行实时监测,同时结合多种执行器自动调节水环境状态,达到鱼缸管理自动化的目标,系统功能包含温度监测与控制,水质检测与处理,水位监测与补水,光照检测与补光,自动/手动喂食等模块,这些模块涵盖了鱼缸维护的各环节,硬件部分采用模块化设计思路,标准化各功能单元接口,为系统扩展和维护保留了可操作性;软件部分清晰分结构,保持代码高效且稳定,强化系统长期运行的可靠依据。系统经过全面测试后,各项性能指标都达到设计要求,可有效提升鱼缸管理水平和养鱼成功率,该系统不仅成本适中,操作简便,也适合家庭用户使用,同时具有较好的实用价值与推广潜力,未来可以增加水质化学参数检测,鱼类行为识别和远程控制功能,对系统智能化水平进行提升。参考文献参考文献[1]吴海青何满塘周朝阳郭晗贺泱钤王立功.基于STM32单片机的智能鱼缸控制系统设计[J].机械工程与自动化,2022(6):158-160.[2]李龙,唐思均,李玮.基于单片机的智能鱼缸控制系统的设计[J].科技展望,2016,26(007):191-191.DOI:10.3969/j.Nissan.1672-8289.2016.07.166.[3]吕杰,梁鉴明.一种基于STM32单片机的智能鱼缸控制系统设计[J].现代信息科技,2020,4(20):5.DOI:10.19850/j.kink.2096-4706.2020.20.004.[4]马骁轩.基于单片机的智能鱼缸自动控制系统设计[J].[2024-03-20].[5]殷佳琪.基于单片机控制的鱼缸水循环系统设计[J].黑龙江科技信息,2020,000(029):98-99.[6]丁惠忠.观赏鱼缸智能控制系统的设计[D].苏州大学[2024-03-20].DOI:10.7666/d.y1304038.[7]杨雨生,吴丽波,龙玥彤,等.基于单片机的智能生态鱼缸的设计[J].湖北农机化,2019(12):1.DOI:CNKI:SUN:HBJH.0.2019-12-052.[8]孙悦,王震,向垚.基于51单片机的智能鱼缸系统[J].中国科技信息,2018.DOI:CNKI:SUN:XXJK.0.2018-13-018.[9]赵宗景.基于物联网的远程可控可通信水族箱的设计实现[D].河北北方学院[2024-03-20].DOI:CNKI:CDMD:2.1017.275258.[10]郝海燕李梦琪李瑾玥龚杰.基于单片机的智能鱼缸控制系统设计[J].内江科技,2022,43(3):49-50.[11]黎涛,金亚玲.基于单片机的智能鱼缸温度控制系统的设计[J].湖北农机化,2019(12):1.DOI:CNKI:SUN:HBJH.0.2019-12-051.[12]任浩,汪俊,王毅,等.基于51单片机的智能生态鱼缸设计[J].黑龙江科技信息,2018,000(008):174-175.[13]邱义.基于STM32的智能鱼缸远程控制系统设计[J].信息技术与信息化,2020(10):3.DOI:10.3969/j.Nissan.1672-9528.2020.10.073.[14]孔得丰.基于ATmega64智能鱼缸控制系统的设计[J].信息与电脑,2019(12):4.DOI:CNKI:SUN:XXDL.0.2019-12-032.[15]王燕平.基于蓝牙技术的智能鱼缸控制系统设计[J].电子技术(上海),2021(003):000.[16]殷佳琪.基于单片机控制的鱼缸水循环系统设计[J].科学技术创新,2020(29):2.DOI:CNKI:SUN:HLKX.0.2020-29-042.[17]李湘,李东来,张大伟.基于C51的智能鱼缸系统设计[J].湖北农机化,2021(11):2.DOI:10.3969/j.Nissan.1009-1440.2021.11.071.[18]陈帅华.基于物联网的智能鱼缸投食系统设计[J].科学咨询,2021,000(012):82.[19]朱炯健,张喜洋,杨树辉,等.基于STM32的远程无线智能鱼缸控制系统设计[J].科技风,2019(6):1.DOI:CNKI:SUN:KJFT.0.2019-06-052.[20]王馨萱.基于单片机的鱼缸温度控制系统设计[J].电子测试,2019(15):3.附录B附录A鱼缸水环境控制系统设计电路原理图:附录B附录B部分源程序:#include"stm32f1xx_hal.h"#include"oled.h"#include"ds18b20.h"#include<stdio.h>#include<string.h>/*私有定义*/#defineLED_PINGPIO_PIN_13#defineLED_GPIO_PORTGPIOC#defineRELAY1_PINGPIO_PIN_14//换水继电器#defineRELAY1_GPIO_PORTGPIOC#defineRELAY2_PINGPIO_PIN_15//加热继电器#defineRELAY2_GPIO_PORTGPIOC#defineWATER_LEVEL_PINGPIO_PIN_1//水位检测#defineWATER_LEVEL_GPIO_PORTGPIOA#defineLIGHT_SENSOR_PINGPIO_PIN_0//光照传感器#defineLIGHT_SENSOR_GPIO_PORTGPIOA#defineTURBIDITY_PINGPIO_PIN_4//浊度传感器#defineTURBIDITY_GPIO_PORTGPIOB#defineKEY1_PINGPIO_PIN_12//总开关按键#defineKEY1_GPIO_PORTGPIOB#defineKEY2_PINGPIO_PIN_13//喂食按键#defineKEY2_GPIO_PORTGPIOB/*GPIO宏定义*/#defineLED_ON()HAL_GPIO_WritePin(LED_GPIO_PORT,LED_PIN,GPIO_PIN_RESET)#defineLED_OFF()HAL_GPIO_WritePin(LED_GPIO_PORT,LED_PIN,GPIO_PIN_SET)#defineRELAY1_ON()HAL_GPIO_WritePin(RELAY1_GPIO_PORT,RELAY1_PIN,GPIO_PIN_SET)#defineRELAY1_OFF()HAL_GPIO_WritePin(RELAY1_GPIO_PORT,RELAY1_PIN,GPIO_PIN_RESET)#defineRELAY2_ON()HAL_GPIO_WritePin(RELAY2_GPIO_PORT,RELAY2_PIN,GPIO_PIN_SET)#defineRELAY2_OFF()HAL_GPIO_WritePin(RELAY2_GPIO_PORT,RELAY2_PIN,GPIO_PIN_RESET)#defineREAD_TURBIDITY()HAL_GPIO_ReadPin(TURBIDITY_GPIO_PORT,TURBIDITY_PIN)#defineREAD_KEY1()HAL_GPIO_ReadPin(KEY1_GPIO_PORT,KEY1_PIN)#defineREAD_KEY2()HAL_GPIO_ReadPin(KEY2_GPIO_PORT,KEY2_PIN)/*私有变量*/staticADC_HandleTypeDefhadc1;staticTIM_HandleTypeDefhtim3;staticUART_HandleTypeDefhuart1;staticuint8_tKey1_folg=0;//系统工作状态标志staticuint8_tKey2_folg=0;//喂食状态标志staticintz=0;//喂食计时变量staticfloattemperature=0;//温度值staticuint8_twater_level=0;//水位值(0-99)staticuint8_tlight_value=0;//光照值(0-99)staticuint8_tturbidity_status=0;//浊度状态(0:正常,1:异常)/*私有函数声明*/staticvoidSystemClock_Config(void);staticvoidGPIO_Init(void);staticvoidADC1_Init(void);staticvoidTIM3_Init(void);staticvoidUSART1_Init(void);staticvoidKey_Scan(void);staticuint16_tGet_ADC_Value(uint32_tchannel);staticvoidControl_Servo(uint8_tservo_id,uint16_tangle);staticvoidSend_Data_To_WiFi(void);staticvoidUpdate_OLED_Display(void);/*主函数*/intmain(void){/*复位所有外设,初始化HAL库*/HAL_Init();/*配置系统时钟*/SystemClock_Config();/*初始化GPIO*/GPIO_Init();/*初始化ADC*/ADC1_Init();/*初始化定时器3(用于舵机控制)*/TIM3_Init();/*初始化USART1(用于WiFi通信)*/USART1_Init();/*初始化OLED显示屏*/OLED_Init();OLED_Clear();OLED_ShowChinese(32,0,0);//"鱼"OLED_ShowChinese(48,0,1);//"缸"OLED_ShowChinese(64,0,2);//"控"OLED_ShowChinese(80,0,3);//"制"OLED_ShowChinese(96,0,4);//"系"OLED_ShowChinese(112,0,5);//"统"/*初始化DS18B20温度传感器*/while(DS18B20_Init()){HAL_Delay(100);}/*设置舵机初始位置*/Control_Servo(1,90);//舵机A初始位置90度(喂食)Control_Servo(2,45);//舵机B初始位置45度(增氧/换水)/*主循环*/while(1){/*扫描按键*/Key_Scan();/*系统工作状态*/if(Key1_folg==1){/*读取温度传感器*/temperature=DS18B20_Get_Temp();/*读取ADC值(水位和光照)*/uint16_tadc_water=Get_ADC_Value(ADC_CHANNEL_1);uint16_tadc_light=Get_ADC_Value(ADC_CHANNEL_0);/*转换为百分比值(0-99)*/water_level=(uint8_t)((adc_water*99)/4095);light_value=(uint8_t)((adc_light*99)/4095);/*读取浊度传感器状态*/turbidity_status=(READ_TURBIDITY()==GPIO_PIN_RESET)?1:0;/*控制LED补光灯*/if(light_value<40)//光照阈值设为40{LED_ON();//低光照,开启补光}else{LED_OFF();//光照充足,关闭补光}/*控制加热继电器*/if(temperature<25.0f)//温度阈值设为25℃{RELAY2_ON();//低温,开启加热}elseif(temperature>28.0f)//温度上限28℃{RELAY2_OFF();//高温,关闭加热}/*控制水位继电器(水泵)*/if(water_level<50)//水位阈值设为50%{RELAY1_ON();//水位低,开启水泵}else{RELAY1_OFF();//水位正常,关闭水泵}/*控制增氧/换水舵机*/if(turbidity_status==1)//水质异常{Control_Servo(2,135);//舵机B转到135度位置(启动增氧/换水)}else{Control_Servo(2,45);//水质正常,舵机B回到45度位置}/*喂食舵机控制*/if(z>0){Control_Servo(1,180);//舵机A转到180度(打开食物通道)z--;}else{Control_Servo(1,90);//舵机A回到90度(关闭食物通道)}/*更新OLED显示*/Update_OLED_Display();/*发送数据到WiFi模块*/Send_Data_To_WiFi();}/*延时100ms*/HAL_Delay(100);}}/*系统时钟配置*/staticvoidSystemClock_Config(void){RCC_OscInitTypeDefRCC_OscInitStruct={0};RCC_ClkInitTypeDefRCC_ClkInitStruct={0};RCC_PeriphCLKInitTypeDefPeriphClkInit={0};/*配置HSE为外部晶振,启用PLL*/RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/*选择PLL作为系统时钟源并配置总线时钟*/RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2)!=HAL_OK){Error_Handler();}/*配置ADC时钟*/PeriphClkInit.PeriphClockSelection=RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection=RCC_ADCPCLK2_DIV6;if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit)!=HAL_OK){Error_Handler();}}/*GPIO初始化*/staticvoidGPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct={0};/*启用GPIO时钟*/__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*配置LED引脚*/GPIO_InitStruct.Pin=LED_PIN;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED_GPIO_PORT,&GPIO_InitStruct);LED_OFF();/*配置继电器引脚*/GPIO_InitStruct.Pin=RELAY1_PIN|RELAY2_PIN;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(RELAY1_GPIO_PORT,&GPIO_InitStruct);RELAY1_OFF();RELAY2_OFF();/*配置浊度传感器引脚*/GPIO_InitStruct.Pin=TURBIDITY_PIN;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(TURBIDITY_GPIO_PORT,&GPIO_InitStruct);/*配置按键引脚*/GPIO_InitStruct.Pin=KEY1_PIN|KEY2_PIN;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_PULLUP;HAL_GPIO_Init(KEY1_GPIO_PORT,&GPIO_InitStruct);/*配置ADC引脚*/GPIO_InitStruct.Pin=WATER_LEVEL_PIN|LIGHT_SENSOR_PIN;GPIO_InitStruct.Mode=GPIO_MODE_ANALOG;HAL_GPIO_Init(WATER_LEVEL_GPIO_PORT,&GPIO_InitStruct);/*配置PWM输出引脚(舵机)*/GPIO_InitStruct.Pin=GPIO_PIN_6|GPIO_PIN_7;//PA6,PA7对应TIM3_CH1,TIM3_CH2GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);/*配置USART1引脚*/GPIO_InitStruct.Pin=GPIO_PIN_9;//PA9(TX)GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.Pin=GPIO_PIN_10;//PA10(RX)GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);}/*ADC初始化*/staticvoidADC1_Init(void){ADC_ChannelConfTypeDefsConfig={0};/*ADC1基本配置*/hadc1.Instance=ADC1;hadc1.Init.ScanConvMode=ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode=DISABLE;hadc1.Init.DiscontinuousConvMode=DISABLE;hadc1.Init.ExternalTrigConv=ADC_SOFTWARE_START;hadc1.Init.DataAlign=ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion=1;if(HAL_ADC_Init(&hadc1)!=HAL_OK){Error_Handler();}/*启用ADC时钟*/__HAL_RCC_ADC1_CLK_ENABLE();}/*获取ADC值*/staticuint16_tGet_ADC_Value(uint32_tchannel){ADC_ChannelConfTypeDefsConfig={0};/*配置ADC通道*/sConfig.Channel=channel;sConfig.Rank=ADC_REGULAR_RANK_1;sConfig.SamplingTime=ADC_SAMPLETIME_55CYCLES_5;if(HAL_ADC_ConfigChannel(&hadc1,&sConfig)!=HAL_OK){Error_Handler();}/*启动ADC转换*/HAL_ADC_Start(&hadc1);/*等待转换完成*/if(HAL_ADC_PollForConversion(&hadc1,100)==HAL_OK){/*读取ADC值*/returnHAL_ADC_GetValue(&hadc1);}return0;}/*定时器3初始化(用于舵机PWM)*/staticvoidTIM3_Init(void){TIM_MasterConfigTypeDefsMasterConfig={0};TIM_OC_InitTypeDefsConfigOC={0};/*基本定时器配置*/htim3.Instance=TIM3;htim3.Init.Prescaler=72-1;//72MHz/72=1MHzhtim3.Init.CounterMode=TIM_COUNTERMODE_UP;htim3.Init.Period=20000-1;//1MHz/20000=50Hz(20ms)htim3.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim3.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;if(HAL_TIM_PWM_Init(&htim3)!=HAL_OK){Error_Handler();}/*主模式配置*/sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;if(HAL_TIMEx_MasterConfigSynchronization(&htim3,&sMasterConfig)!=HAL_OK){Error_Handler();}/*PWM通道配置*/sConfigOC.OCMode=TIM_OCMODE_PWM1;sConfigOC.Pulse=1500;//初始1.5ms脉宽(舵机中间位置)sConfigOC.OCPolarity=TIM_OCPOLARITY_HIGH;sConfigOC.OCFastMode=TIM_OCFAST_DISABLE;/*配置通道1*/if(HAL_TIM_PWM_ConfigChannel(&htim3,&sConfigOC,TIM_CHANNEL_1)!=HAL_OK){Error_Handler();}/*配置通道2*/if(HAL_TIM_PWM_ConfigChannel(&htim3,&sConfigOC,TIM_CHANNEL_2)!=HAL_OK){Error_Handler();}/*启动PWM通道*/HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);/*启用TIM3时钟*/__HAL_RCC_TIM3_CLK_ENABLE();}/*控制舵机角度*/staticvoidControl_Servo(uint8_tservo_id,uint16_tangle){uint16_tpulse;/*限制角度范围*/if(angle>180)angle=180;/*将角度转换为脉宽*/pulse=500+((2000*angle)/180);//0.5ms(0°)-2.5ms(180°)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)完整答案详解
- 市辖县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(夺冠系列)
- 城口县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及一套答案详解
- 2026年泉州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(研优卷)
- 宁波市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及完整答案详解
- 深圳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(夺冠系列)
- 2025年广东省佛山市辅警公共基础知识题库(附答案)
- 滁州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(精练)
- 兴安盟农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(预热题)
- 达州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)有答案详解
- 2025内蒙古大数据产业发展集团有限公司社会招聘22人考试模拟试题及答案解析
- 2025国考山西证监法律专业科目模拟题及答案
- 2025年药师资格药管和法规真题预测考卷(含答案)
- 2025年河南护理考试试题及答案
- 高端定制家具成本优化2025年研究报告
- 2025年-《中华民族共同体概论》课后习题答案-新版
- 2025年全国统一驾驶证科目一考试题库(附答案)
- 高校实验室安全基础课(实验室准入教育)学习通网课章节测试答案
- 2025年安全管理体系审核与持续改进制度
- 全国2025年“质量月”全面质量管理知识竞赛题库及答案
- 石材清洗工程合同协议书
评论
0/150
提交评论