<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教你輕松DIY藍牙遙控平衡小車

lPCU_elecfans ? 來源:未知 ? 作者:李倩 ? 2018-07-31 11:44 ? 次閱讀

【背景描述】

出于業余愛好,以及學習自動化控制PID理論,經過多種選擇后決定制作平衡車進行實際操練。剛開始試著用單純的裸機,完成直立控制,然后慢慢的又增加了屏幕顯示,用于參數調整顯示,再然后用藍牙透傳進行串口遙控,并且增加用遙控器進行PID參數調增。增加這些功能以后,再進一步逐漸的增加功能,就需要進行在多任務的時間調配上進行更嚴格分配,每增加一個功能,都需要重新調整在這個上面花費了不少時間。

例如,在屏幕的顯示上,由于需要較多時間進行數據端口模擬,耗費大量時間,如果需要增加多個參數顯示,相應的屏幕程序就需要更多時間,就會改變整個程序的時間分配,平衡車直立控制就會不穩定,難與調試。由于上面的困擾,并且之前2010年的時候一個偶然機會了解到了RT-Thread實時操作系統,決定試著用操作系統的理念進行編寫,可以省去在裸機調試時間分配的困擾。由于裸機我用了STM32F103C8T6芯片只有64KB,我本人懶于修改硬件,嘗試修剪RTT,用盡可能少的組件,手動的把3.0.4版本去掉外圍,只用內核。

在內核上把平衡車的控制分為直立控制、藍牙控制、屏幕控制、以及原來的LED控制,后續增加超聲波,指南模塊等。盡可能使用現成的元件搭建起實物原型,然后再不斷增加功能,從擴充的過程中完成控制理論的學習和對實時操作系統的掌握。由于有限的代碼空間也進一步鍛煉代碼的精簡訓練。

【開發環境】

主控:STM32F103C8T6

編譯環境:MDK5.23

RT-Thread版本:RT-Thread 3.0.4內核

【硬件設計】

電池:用的是圓柱鋰電池??梢灾苯佑贸潆妼毨锩娴匿囯姵?,外加三串保護板。做成12V鋰電。

主控板:最小系統板

電機驅動模塊: 利用了里面的5V電源

LCD模塊:12684

電機:

電機用的GB37電機,是一款使用霍爾傳感器編碼器的測速模塊,配有13 線強磁碼盤,A B 雙相輸出共同利用下,通過計算可得出車輪轉一圈時,脈沖數可達30132=780 個,單相也可以達到390 個,精度足夠能讓平衡小車無所不能。

其實霍爾編碼器還是不夠精確的,會在快速轉動的時候漏掉編碼,為此我調試了很久。

遙控器用組成:ARDUINO2560+joystick+hc05藍牙組成。

超聲波模塊:

三軸傳感器:MPU6050

硬件系統用搭模塊的方式組成,之間的連接可以全部用杜邦線連接。

電路原理圖由于手工需要的時候接上去的,沒有畫,其實完全可以自己動手手動連接一下。

總的功能原理圖如下:

原理功能圖,用的是老圖了?;径际沁@個原理。器件上,陀螺儀用的是MPU6050。主控:STM32F103CT8最小系統板。

【軟件設計】

工程概覽:

線程初始化:

主要線程定義:

小車控制線程

藍牙遙控協議解析:

超聲波線程:

目前代碼優化不夠,還很多用全局變量傳遞參數。

器件驅動(參考部分開源代碼)->直立控制->速度控制->方向控制->無線藍牙控制(含遙控對控制參數的調整)

【關鍵代碼解析】

我所做的不同是,角度用的是PI控制、速度用PID、方向用了PI,我在角度、速度、方向上都加進了PID控制。程序代碼難理解的部分也是PID部分。后期會在進一步改進中模糊控制相應的PID控制參數。根據不同速度、角度判斷是否進行積分。這是最耗費時間的。例如目前小車碰到障礙物時,無法前進,速度的積分控制在這時應當停止,目前還未做改進。

以下是控制直立的關鍵代碼。保證每5毫米執行一次,完成角度采集,角度控制,方向控制,速度控制的周期。

int car_run(void) { float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f; unsigned char more=0; long quat[4];// unsigned long sensor_timestamp=0; float Pitch; // short gyro[3], accel[3], sensors;// int stop=0; float angle_out,speed_out,direction_out; float car_zero_angle=-1.78; // static int run_err=0; char numf[20]; dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors, &more); if ((sensors & INV_WXYZ_QUAT))//&&(more<10) ? ?{ ? ? ? ? ? q0=quat[0] / q30; ? ? ? ? ? q1=quat[1] / q30; ? ? ? ? ? q2=quat[2] / q30; ? ? ? ? ? q3=quat[3] / q30; ? ? ? ? ? ? ? ? ? ? ? Pitch ?= asin(2 * q1 * q3 - 2 * q0* q2)* 57.3; ? ? ? ? ? sprintf(numf,"A:%2.3f*",Pitch); ? ? ? ? ? sping_english8x8(0 , 2 ,numf) ; ? ? ? if (Pitch>20||Pitch<-20) stop = 1; ? ? ? ? ? angle_out = AngleControl(Pitch,gyro[1],car_zero_angle,stop); ? ? ? ? ? velocity_proc(&speed_out,&direction_out,speed_set,direction_set,stop); ? ? ? ? ? ? ? ? ? MotorOutput(angle_out,speed_out,direction_out,stop); ? } ? ? else ? ? ? ? ? ?{ ? ? ? ? ? ? ? ? ?if ((sensors & INV_WXYZ_QUAT)&&(more==0))run_err++; ? ? ? ? ? ? ?} ?return run_err; }

Rt_thread由于資源限制,僅僅用了內核部分,利用了內核的線程調度功能,共創建了三個線程。關鍵點是在于三個線程的優先級別設置,這也是在設計平衡車對實時要求的一種體現。最關鍵的是車的平衡,設置為最高優先級,并且MPU6050的硬件要求5MS進行一次讀數據??臻e時間之外可以進行藍牙串口傳輸的解析工作,把遙控指令傳給速度控制進程。

/* init hxlcd thread */ init_thread = rt_thread_create("hxlcd", hxlcd_thread_entry,RT_NULL,256, 15, 20); if (init_thread != RT_NULL) rt_thread_startup(init_thread); /* init car control thread */ init_thread = rt_thread_create("car_run", car_control_thread,RT_NULL, 512, 10, 20); if (init_thread != RT_NULL) rt_thread_startup(init_thread); /* init car Protocol thread */ init_thread = rt_thread_create("car_Pro", car_Protocol_thread, RT_NULL,2024, 11, 20); if (init_thread != RT_NULL) rt_thread_startup(init_thread);

【RT-Thread使用情況介紹】

該小車僅僅使用了RT-Thread內核,原本打算使用設備管理,但是編譯后發現代碼量大了后決定設備管理也不用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 藍牙
    +關注

    關注

    112

    文章

    5482

    瀏覽量

    166328
  • 平衡小車
    +關注

    關注

    1

    文章

    38

    瀏覽量

    12460

原文標題:一文教你輕松DIY藍牙遙控平衡小車——周四RTOS專欄

文章出處:【微信號:elecfans,微信公眾號:電子發燒友網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    DIY 制作藍牙遙控小車

    `大學畢業后,就利用業余時間做一個藍牙遙控小車,就在網上找資料及購買配件。用STC89S52單片機控制小車, LN298電機驅動模塊驅動小車
    發表于 05-05 22:53

    藍牙平衡小車

    藍牙控制兩輪平衡小車
    發表于 06-09 10:54

    自己diy的自平衡小車玩具

    參照飛思卡爾智能車的方案,diy了一臺兩輪自平衡小車,小車上電后能停在一點不動,收到干擾可以自動平衡。另外我發現,配合速度環,即使重心不在
    發表于 04-19 12:39

    小蛋黃派迷你自平衡小車

    `中秋期間做好的硬件,小車+遙控器;看到網上有位大神做的蛋黃派自平衡小車,很喜歡很可愛;就DIY了這個,硬件做好了,軟件我頭疼了,依據硬件需
    發表于 09-09 00:07

    STM32主控紅外遙控雙輪平衡小車設計

    我的STM32主控紅外遙控雙輪平衡小車 (2015-05-28 17:38:27)[編輯][刪除]轉載▼ 我的紅外遙控雙輪平衡
    發表于 08-17 09:26

    最簡單DIY的51藍牙遙控小車設計方案是什么

    51單片機物聯網智能小車系列文章目錄第一篇:最簡單DIY的51藍牙遙控小車設計方案文章目錄51單片機物聯網智能
    發表于 12-01 08:13

    51藍牙遙控小車簡介

    51藍牙遙控小車簡介:通過手機上的藍牙調試器APP與51藍牙遙控
    發表于 01-05 07:15

    如何通過手機APP和藍牙模塊實現對平衡小車的控制

    ??大家好,我是小政。本篇文章我將針對藍牙遙控平衡小車進行詳細的講解,讓每位小伙伴能夠通過手機APP和藍牙模塊實現對
    發表于 01-21 10:14

    教你怎樣去挑選藍牙遙控小車的元器件

    教你怎樣去挑選藍牙遙控小車的元器件
    發表于 03-01 06:45

    藍牙遙控小車教程

    遙控小車教程,你可以點擊打開學習,有程序,藍牙控制。
    發表于 06-03 16:16 ?0次下載

    DIY:iPhone變身遙控小車

    DIY:iPhone變身遙控小車
    發表于 01-12 22:41 ?21次下載

    藍牙遙控小車程序

    藍牙遙控小車程序
    發表于 03-31 17:42 ?32次下載

    圖文結合DIY制作遙控火車

    如何完成自制遙控火車?本文提供詳細的圖文教程,教你一步步DIY制作遙控火車頭模型。下面將會介紹自制遙控火車的主要材料,讓你
    的頭像 發表于 01-18 18:38 ?7317次閱讀
    圖文結合<b class='flag-5'>DIY</b>制作<b class='flag-5'>遙控</b>火車

    基于單片機的藍牙小車藍牙遙控的程序

    基于單片機的藍牙小車藍牙遙控
    發表于 06-05 10:00 ?95次下載
    基于單片機的<b class='flag-5'>藍牙</b><b class='flag-5'>小車</b>帶<b class='flag-5'>藍牙</b><b class='flag-5'>遙控</b>的程序

    最簡單DIY的51藍牙遙控小車設計方案

    51單片機物聯網智能小車系列文章目錄第一篇:最簡單DIY的51藍牙遙控小車設計方案文章目錄51單片機物聯網智能
    發表于 11-23 16:22 ?41次下載
    最簡單<b class='flag-5'>DIY</b>的51<b class='flag-5'>藍牙</b><b class='flag-5'>遙控</b><b class='flag-5'>小車</b>設計方案
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>