雷德斯 and枕頭們,好久不見,大家是不是更優秀了呢,哈哈,工作太忙啦,夜里肝一篇,大家久等啦,話不多說,來,干貨!
ART-PI-重力感應無線智能小車第二彈-----OneNet+板載wifi控制電機轉動此次分享主要用到的軟硬件資源:軟件(RT-Studio平臺): 1、OneNet軟件包; 2、OneNet服務器; 3、pahomqtt軟件包 4、webclient軟件包 硬件: 1、板載wifi模塊 2、ART-PI擴展板(自設計,開源) 3、L298N電機驅動 4、4個普通IO 實現目標:OneNet服務器下發控制電機正轉、反轉、停止。
一、L298N簡介
此次使用的是左邊封裝的15引腳封裝
L298N是專用驅動集成電路,屬于H橋集成電路,其持續輸出電流為2A,最高電流4A,最高工作電壓46V,可以驅動感性負載,如大功率直流電機,步進電機,電磁閥等,輸入端可以與單片機直接相連接,方便單片機控制。當驅動直流電機時,可以直接控制步進電機,并可以實現電機正轉與反轉,實現此功能只需改變輸入端的邏輯電平。L298N芯片可以驅動兩個二相電機,也可以驅動一個四相電機,輸出電壓最高可達46V,可以直接通過電源來調節輸出電壓;可以直接用單片機的IO口提供控制信號。 內部結構框圖:有興趣的可以分析分析里面的控制邏輯,也比較簡單,不多說了。
引腳定義:
L298N可接受標準TTL邏輯電平信號VSS,VSS可接4.5~7V電壓。4腳VS接電源電壓,VS電壓范圍為VIH+2.5~46V。輸出電流可達2A,可驅動電感性負載。1腳和15腳下管的發射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。L298可驅動2個電動機,OUT1,OUT2和OUT3,OUT4之間可分別接電動機。5,7,10,12腳接輸入控制電平,控制電機的正反轉。EnA,EnB接控制使能端,控制電機的停轉。此次設計我們驅動兩個直流電機,OUT1和OUT2控制1個,OUT3和OUT4控制1個。 以上介紹我們知道,通過5,7,10,12引腳可以控制電機的正轉,反轉,停止,那么怎么實現呢,下面是控制IO的真值表,拿其中一組作為演示,另一組一樣的邏輯,手冊中給出的是:
從手冊給出的說明來看,欲要電機驅動輸出,需要以下步驟來實現:1、使能EnA,EnB引腳,可以直接接到單片機系統電源或者由單片機IO輸出高電平來控制; 2、Input1、Input2必須是相反的電平,即以下邏輯,至于前進還是后退,跟電機的接線有關系哈,大家可以自己測試調整。
輸入信號 | 電機運行方式 | ||
使能端A/B | 輸入引腳1(5)/3(10) | 輸入引腳2(7)/4(12) | |
1 | 1 | 0 | 前進 |
1 | 0 | 1 | 后退 |
1 | 1 | 1 | 緊急停車 |
1 | 0 | 0 | 緊急停車 |
0 | X | X | 停止 |
二、電路設計
前半部分是光耦隔離芯片,用來抗干擾以及保護單片機IO,P8、P9是使能端,如果不接單片機IO控制,直接短路帽短接即可,P7是電機控制輸出端口。 與ART-PI的接口采用的是4個普通IO,伙伴們若是買的L298N模塊,IO可以自選。
電機:關于電機的介紹,大家可以移步到一位大佬的公眾號,介紹非常詳細啦,公眾號:嵌入式從0到1,大家可以多多關注,非常nice的一位號主。
組裝好的小車,用了2個輪子加一個萬向輪,剛好用一個L298N來驅動。
三、代碼控制實現
此前我們一直用的是ESP8266,現在我們改為使用板載的wifi模組,充分利用板載資源,沒有ART-PI板子的童鞋不要擔心,RT-Studio支持很多芯片的,大家可以使用手里現有的板子跟著做,一樣的,wifi部分可以使用小飛哥上個教程,使用esp8266或者其他方式,邏輯是一樣的啦。 1、新建工程,我們選擇如下的參數,基于ART-PI開發板,當然沒有板子的伙伴可以選擇基于芯片,然后選擇示例工程,wifi工程,RT-Thread團隊已經把AP6212部分做成庫封裝在RT-Studio平臺,建立好工程之后,setting里面可以看到關于AP6212的組件已經勾選,main函數開始增加了2個函數調用,這兩個函數是用來上電自動初始化wifi部分,如果已經連接了wifi,下次上電就會自動搜索完成連接。編譯完成之后,download進去,來看看初步效果:
控制臺輸入wifi help,可以看到關于wifi的一些命令
輸入wifi scan,掃描附近區域wifi,接下來輸入wifi join SSID password,由于小飛哥的板子之前連接過別的wifi,一直在搜索,但并沒有找到,輸入新的wifi名稱。
Wifi連接成功,現在重啟設備,看看自動連接效果,可以發現,是逐個進行掃描的,成功找到當前wifi并連接成功,開機自動連接效果測試OK。
接下來是連接OneNet啦,熟悉小飛哥的應該知道怎么做啦,第一次看小飛哥文章的麻煩移步前面的文章看看呀,不懂的,加群一起交流,群里有很多志同道合的好伙伴。 下面在我們的工程里面添加L298N控制邏輯代碼,主要是對IO的控制,也是比較簡單的,根據上面介紹的控制邏輯,讓相應的IO輸出高低電平就可以啦,方向控制函數可以合成一個,小飛哥為了讓大家看的更簡單明了,分開寫了,要注意的是,方向控制跟你的L29N輸出接到電機的順序有關,如果方向反了,修改代碼或者接線順序反一下就可以實現同樣的功能啦。有需要的伙伴,源碼都是開源的,可以跟小飛哥說一下,后續會上傳到github,大家可以自行下載。
IO初始化配置函數:
#include
#include
#include"drv_common.h"
#include"motor_drv.h"
#defineMotorCtrl1Pin GET_PIN(B, 0)
#defineMotorCtrl2Pin GET_PIN(B, 2)
#defineMotorCtrl3Pin GET_PIN(B, 1)
#defineMotorCtrl4Pin GET_PIN(A, 11)
voidMotorCtrlPinInit()
{
rt_pin_mode(MotorCtrl1Pin, PIN_MODE_OUTPUT);
rt_pin_mode(MotorCtrl2Pin, PIN_MODE_OUTPUT);
rt_pin_mode(MotorCtrl3Pin, PIN_MODE_OUTPUT);
rt_pin_mode(MotorCtrl4Pin, PIN_MODE_OUTPUT);
rt_pin_write(MotorCtrl1Pin, PIN_LOW);
rt_pin_write(MotorCtrl2Pin, PIN_LOW);
rt_pin_write(MotorCtrl3Pin, PIN_LOW);
rt_pin_write(MotorCtrl4Pin, PIN_LOW);
}
前進:
voidMotorCtrlForward()
{
rt_pin_write(MotorCtrl1Pin, PIN_HIGH);
rt_pin_write(MotorCtrl2Pin, PIN_LOW);
rt_pin_write(MotorCtrl3Pin, PIN_HIGH);
rt_pin_write(MotorCtrl4Pin, PIN_LOW);
}
后退:
voidMotorCtrlBack()
{
rt_pin_write(MotorCtrl1Pin, PIN_LOW);
rt_pin_write(MotorCtrl2Pin, PIN_HIGH);
rt_pin_write(MotorCtrl3Pin, PIN_LOW);
rt_pin_write(MotorCtrl4Pin, PIN_HIGH);
}
右轉:
voidMotorCtrlRight()
{
rt_pin_write(MotorCtrl1Pin, PIN_LOW);
rt_pin_write(MotorCtrl2Pin, PIN_HIGH);
rt_pin_write(MotorCtrl3Pin, PIN_HIGH);
rt_pin_write(MotorCtrl4Pin, PIN_LOW);
}
左轉:
voidMotorCtrlLeft()
{
rt_pin_write(MotorCtrl1Pin, PIN_HIGH);
rt_pin_write(MotorCtrl2Pin, PIN_LOW);
rt_pin_write(MotorCtrl3Pin, PIN_LOW);
rt_pin_write(MotorCtrl4Pin, PIN_HIGH);
}
停止:
voidMotorCtrlStop()
{
/* rt_pin_mode(MotorCtrl1Pin, PIN_MODE_OUTPUT);
rt_pin_mode(MotorCtrl2Pin, PIN_MODE_OUTPUT);
rt_pin_mode(MotorCtrl3Pin, PIN_MODE_OUTPUT);
rt_pin_mode(MotorCtrl4Pin, PIN_MODE_OUTPUT);*/
rt_pin_write(MotorCtrl1Pin, PIN_LOW);
rt_pin_write(MotorCtrl2Pin, PIN_LOW);
rt_pin_write(MotorCtrl3Pin, PIN_LOW);
rt_pin_write(MotorCtrl4Pin, PIN_LOW);
}
接下來就是OneNet下發指令進行控制啦,這也是為后面的重力感應遙控做鋪墊,小飛哥在之前代碼基礎上做了一些修改,不需要再一條條發命令接入Onenet啦,上電就可以自動連接wifi,接入Onenet服務器啦,省了不少麻煩,哈哈,無需輸入一條命令,就可以連接到Onenet服務器了。
設備已在線
然后在Onenet端做了一個無比丑陋的控制器。拿一個舉例子,電機ON是發送控制命令,OFF發送停止命令,相信到這里,之前做過Onenet控制控制板載LED的童鞋已經知道怎么做啦,沒錯,LED控制函數中增加下車接收命令控制即可,完整函數內容,占篇幅,可以直接跳過,主要是給大家拷貝方便點。
/* onenetmqttcommand response callback function */
staticvoidonenet_cmd_rsp_cb(uint8_t*recv_data, size_trecv_size, uint8_t**resp_data, size_t*resp_size)
{
charres_buf[] = { "cmdis received! "};
LOG_D("recvdata is %.*s ", recv_size, recv_data);
if(!strncmp((char*)recv_data, "led0 on", 7)) //(strstr((char*)recv_data, "led0 on"))
{
rt_pin_write(LED_PIN, 0);
rt_snprintf(res_buf,sizeof(res_buf), "led0 is on");
rt_kprintf("led0 is on ");
}
elseif(!strncmp((char*)recv_data, "led0 off", 8))//(strstr((char*)recv_data, "led0 off"))
{
rt_pin_write(LED_PIN, 1);
rt_snprintf(res_buf,sizeof(res_buf), "led0 is off");
rt_kprintf("led0 is off ");
}
else
{
//rt_kprintf("ledcmdERROR! ");
}
if(!strncmp((char*)recv_data, "led1 on", 7))//(strstr((char*)recv_data, "led1 on"))
{
//rt_pin_write(LED1_PIN, 0);
rt_snprintf(res_buf,sizeof(res_buf), "led1 is on");
rt_kprintf("led1 is on ");
}
elseif(!strncmp((char*)recv_data, "led1 off", 8))//(strstr((char*)recv_data, "led1 off"))
{
//rt_pin_write(LED1_PIN, 1);
rt_snprintf(res_buf,sizeof(res_buf), "led1 is off");
rt_kprintf("led1 is off ");
}
else
{
//rt_kprintf("ledcmdERROR! ");
}
if(!strncmp((char*)recv_data, "forward", 7))//
{
MotorCtrlForward();
rt_kprintf("forward is on ");
}
elseif(!strncmp((char*)recv_data, "back", 4))//
{
MotorCtrlBack();
}
elseif(!strncmp((char*)recv_data, "turnright", 9))//
{
MotorCtrlRight();
}
elseif(!strncmp((char*)recv_data, "turnleft", 8))//
{
MotorCtrlLeft();
}
elseif(!strncmp((char*)recv_data, "stop", 4)){
MotorCtrlStop();
}
/* user have to mallocmemory for response data */
*resp_data = (uint8_t*) ONENET_MALLOC(strlen(res_buf));
strncpy((char*)*resp_data, res_buf,strlen(res_buf));
*resp_size =strlen(res_buf);
}
實現效果:
原文標題:ART-PI-重力感應無線智能小車第二彈-----OneNet+板載wifi控制電機轉動
文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
集成電路
+關注
關注
5391文章
11617瀏覽量
362856 -
封裝
+關注
關注
127文章
7990瀏覽量
143290 -
智能車
+關注
關注
21文章
404瀏覽量
77029
原文標題:ART-PI-重力感應無線智能小車第二彈-----OneNet+板載wifi控制電機轉動
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論