顯示具有 STM8 標籤的文章。 顯示所有文章
顯示具有 STM8 標籤的文章。 顯示所有文章

2017年12月15日 星期五

STM8 BLDC 韌體關於ALIGN SLOPE 參數設定不同時 在動作上有何差異



由下圖可看出設定align slope 參數在4 ms & 10 mS主要差異是在啟動BLDC 馬達的定位動作之前,六臂控制的三相下臂須要先導通,然後U相下臂OFF在到U相上臂開始切換PWM的時間


#Align Slope 4ms


#Align Slope 10mS

2015年3月23日 星期一

STVD gdi-error [40201]: Can't access configuration database

現象:
使用 STVD+Cosmic 開發環境進行DEBUG时,點擊 Debug 按钮,就會弹出来對话框:“** Connection error (usb://usb): gdi-error [40201]: can't access configuration database”。無法進行DEBUG

結論:
這個問題的原因在於安裝 ST TOOLSET 的時候,DAO-3.5 的文件並沒有被正確安裝,導致問題發生

解決方法:
可進入ST TOOLSET 的安裝文件夾,
比如在C:\Program Files(x86)\STMicroelectronics\st_toolset\stvd\dao。
執行在此文件夾下的 ST Toolset.msi 進行覆蓋安裝即可。

如果以上方法還是無法解決,請依以下方法:

1. 先不要執行任何程式(就剛開機完的狀態),administrator mode 執行命令提示元

2. 執行以下命令  Regsvr32 /u "C:\Program Files (x86)\Common Files\Microsoft Shared\DAO\DAO350.DLL"   
    然後會跳出一個視窗顯示 取消登陸 DAO350.DLL     

3. 再執行以下命令  Regsvr32 "C:\Program Files (x86)\Common Files\Microsoft Shared\DAO\DAO350.DLL"
   然後跳出登錄DAO350.DLL,之後再執行STVD 看能不能DEBUG,如果可以就成功
要注意的是,如果有出現0x80004005 錯誤代碼視窗,可能是你忘了先將STVD程式關閉!
因為我就是忘了關STVD,要再重新登錄DAO350.DLL時,就跳出0x80004005 錯誤代碼視窗






2013年12月31日 星期二

STM8 BLDC

Rotor Synnchronization 轉子同步法:
1.感測器法; Hall sensor
2.無感測器法:反電勢,分析未驅動相的反電勢訊號,證實交換點(換相點)

轉子速度調整
1.閉迴路控制:可針對'最終的負載變動做速度補償

2.開迴路控制:在BLDC同步驅動器不需要做到速度控制,轉子最終速度會受負載變動影響

匯流排電壓'調整
1.電流模式:透過'PWM信號設定電流準位以及使用外部RC濾波器設定比較門檻,控制變數是每相電流

2.電壓模式:控制變數是每相電壓,經由固定PWM訊號的DUTY CYCLE,以達到電壓調整.電流限制的級別可由外部電阻分壓決定或經由PWM訊號濾波器(RC電路)


轉子速度測量:
依據公式RPM=(反電勢頻率*60*2)/轉子極數
藉由兩個連續的反電勢零交越以計算]時間的延遲稱為單位時間量測STEP TIME

通訊延遲和消磁時間:
通訊延遲約為一半的step time區間約落在zero crossing 以及step time commution之間
BEMF 只能在未驅動的那一像電流為流才可量測

零交越偵測:
在切換PWM過程中(未驅動相那一相)
T-ON :上臂有效時, 中性點為1/2 BUS電壓
T-OFF:下臂有效時,中性點為零 .

動態反電勢取樣:
這方法針對在低速的低duty cycle以及高速的100% duty cycle最小的反電勢分割

標準BLDC啟動程序有兩種組成:
1.The Alignment phase (校準相):再此模式時,驅動馬達前轉子需移動至指定位置,而要進行此動作.六相開關需設某一組態,令轉子先至某一固定位置,例如:step 6->step 1,下一個要換相的動作是step時,需先移至step 6位置.


2.The ramp-up phase (爬升相):主要功能是執行加速馬達到可以判斷反電勢的速度.當轉速達到的速度可察覺反電勢時,這同步機制視為有效.此機制也稱為自動變換模式.


2013年5月6日 星期一

STM8 I2C溝通 MASTER MODE READ



void I2C_Config(void)
{
I2C_DeInit();
  // I2C_Init(400000, 0x92,I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_10BIT, (uint8_t)16 );  //flow sensor
   I2C_Init(400000,0x92,I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, (uint8_t)16 ); //pressure sensor
}




void I2C_Read_Honeywell(u8* pBuffer,u8 ReadAddr,u8 NumByteToRead)
{
I2C_Cmd(ENABLE);

I2C_GenerateSTART(ENABLE);
    /* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
{
}
/* Send address for read */
I2C_Send7bitAddress(ReadAddr,I2C_DIRECTION_RX);
/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
{
}
/* While there is data to be read */
while(NumByteToRead)
{
if(NumByteToRead == 1)
{
I2C_AcknowledgeConfig(I2C_ACK_NONE);
I2C_GenerateSTOP(ENABLE);
}
if(I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))
{
/* Read a byte from the EEPROM */
*pBuffer = I2C_ReceiveData();
pBuffer++;
}
NumByteToRead--;
}
/* Enable Acknowledgement to be ready for another reception */
I2C_AcknowledgeConfig(I2C_ACK_CURR);
}

2013年4月21日 星期日

STM8 Uart接收的問題

中斷過程中,最好等資料都收集完成,在監控
如果在中斷中監控,資料會有遺失的問題
****stm8 uart  字串接收副程式****

uint8_t IncrementVar_RxCounter1(void) { return RxCounter1++; }

u8 uart1_sync=0;  //要設定全域變數,不然case1 進不去.

 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
u8 data,;
//RxBuffer[IncrementVar_RxCounter1()]
UART1_ClearITPendingBit(UART1_IT_RXNE_OR);
data=UART1_ReceiveData8();

switch(uart1_sync)      
{
case 1:        
RxBuffer[IncrementVar_RxCounter1()]= data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
if(data==0x0d)            
{
RxBuffer[IncrementVar_RxCounter1()] =data;
 //uart1_in_temp_index %= UART1_BUF_SIZE;
 RxCounter1 = 0x00;
 uart1_sync = 0;
}
break;
default:
switch(data)            
case '%':
uart1_sync = 1;
RxBuffer[IncrementVar_RxCounter1()] = data;
//uart1_in_temp_index %= UART1_BUF_SIZE;
break;
break;
}
}
****stm8 uart  字串傳輸副程式****

void UART1_SendByte(u8 Data)
{
UART1_SendData8((unsigned char)Data);
while (UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET);
{
}
}

void UART1_SendString(u8* Data,u16 len)
{
u16 i=0;
for(;i {
UART1_SendByte(Data[i]);
  }
}

2012年11月15日 星期四

STM8 STVD编译器的使用和设置 [轉]


一、STM8开发环境
使用STM8需下载下列工具:
1、ST 8bit MCU通用集成开发环境 - ST Visual Develop
IDE包含代码编辑、汇编编译器、代码调试功能,不含C编译器。同时IDE还自带ST Visual Programer编程软件,支持主流8bit
2、COSMIC C Compiler for STM8 16K Limited
免费下载,可申请16K代码限制版本的C 编译器。安装后,会要求注册。按照要求填写注册信息后COSMIC会提供回复,会收到一个16K License文件,将它copy到COSMIC安装路径下的License目录,默认的路径…
打开STVD,选择菜单栏Tools -Options对话框,找到Toolset标签,Toolset中选择“STM8S COSMIC”,Root path中选择COSMIC路径,默认是“CXSTM8_16K”路径。
运行ST Visual Develop(STVD) 集成开发环境,通过菜单栏Files -> New WorkSpace我们可以新建一个新的STM8工程。
在弹出的“New WorkSpace”对话框中,我们可以STVD支持的集中工程模版类型。这里我们选择使用“Create workspace and project” 。
WorkSpace是Project的管理平台,允许在一个WorkSpace中出现多个Project,通过设定我们可以选择当前的活动项目。
输入当前要建立的项目名称,并且可以根据应用的需要通过“Project location”来选择更改WorkSpace存放路径。因这里介绍的例程我们需要支持的MCU平台是STM8系列,C语言使用COSMIC,因此我们还需要对使用的Toolchain进行选择。
下一步我们要选择工程使用的MCU型号。
在对话框中我们可以看到当选中一个MCU型号,在右边的工具列表清单中会显示调试工具支持状态,绿色表示工具可以支持,灰色表示不支持。这里仅是提供调试或仿真支持,不表示编程支持,具体编程支持需要通过STVP编程软件确认。
这样一个最小的应用工程模版STVD就帮我们自动产生了
IDE界面右边的项目目录树中,我们可以看到STVD对工程自动增加了两个文件,一个是main.c文件,一个是stm8_interrupt_vector.c文件。后者提供了STM8所有的中断入口函数的地址表,以及用于各种不同类型外设中断函数名称申明。
在stm8_interrupt_vector.c文件中,我们可以看到除去Reset向量外其它中断向量的入口均是统一使用void NonHandledInterrupt (void)函数。对于正常的使用我们还是需要重新跟改中断函数入库函数名称。
对于中断函数的入口修改
1、struct interrupt_vector const _vectab[] 指明的中断向量表,每一个类似{0x82, NonHandledInterrupt},偏移量的申明表示的都是一个中断矢量对于的中断函数名称。
2、 中断函数的申明 @far @interrupt void NonHandledInterrupt (void)
例当需要使用I2C中断的时候,可以这样做:
1、申明I2C中断函数名称:
在struct interrupt_vector const _vectab[]中找到I2C中断函数入口,加入I2C中断函数名称
{0x82, I2C_Server_Interrupt }, /* IRQ19 - I2C (I2C interrupt) */
2、在stm8_interrupt_vector.c文件中添加服务函数:
@far @interrupt void I2C_Server_Interrupt (void)
{
~~~~~加入中断服务代码~~~~~~
return;
}
3、最好在文件头上方申明外部可调用:extern void I2C_Server_Interrupt (void)
4、或者仅是申明函数,再定义STM8_IT.c、STM8_IT.h文件,将中断服务程序全部放置其中。
工程建立好以后,可以通过菜单栏“Project”->“Settings”来修改项目配置
在项目设定对话框中,我们可以对汇编编译器、C编译器、连接器的配置做修改。
当写好一个程序需要进入调试时,我们可以通过STVD菜单栏的“Debug Instrument” 来选择使用何种调试工具。这里我们使用Rlink,SWIM接口。Simulator是指软仿真功能。
Tip:
1、项目编译默认存在Release、Debug两种选择。如需要自行添加其它类型,可通过菜单栏“Build->Configurations…”来配置
配置好后可通过工具栏“Project”来直接选择。
2、WorkSpace管理多个Project
直接在WorkSpace栏中通过鼠标右键打开workspace的属性,通过“Insert Project int Workspace…”可以在添加多个项目。
二、STM8S的最小硬件系统
STM8的最小硬件系统包含下列部分:
1、电源
2、时钟管理
3、复位管理
4、调试接口(SWIM)
1、电源
STM8S系列MCU的工作在3.0V ~ 5.5V之间,芯片内部自带一个电源管理系统可以为自身核心工作提供1.8V电源

STM8 I2C READ UART接收中斷傳輸


stm8 讀取I2C裝置並透過UART1 接收中斷的方式  傳送資料到PC接收
環境是使用stvd  &cosmic
首先STM8必須先設定好CLK &I2C以及UART的初始化作業

使用中斷觸發必須要加入  enableInterrupts(); 才有用
而使用中斷需要確定中斷向量表的內容是不是都規劃好
然後將CODE寫在it.c的內容 例如:


INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
{
    /* Write one byte to the transmit data register */
   UART1_SendData8(TxBuffer1[IncrementVar_TxCounter1()]);
 if (GetVar_TxCounter1() == GetVar_NbrOfDataToTransfer1())
    {
        /* Disable the UART1 Transmit interrupt */
        UART1_ITConfig(UART1_IT_TXE, DISABLE);
    }
}

另外使用UART1_SendData8( ) 這個function時
如果要連續使用最好要有delay time
不然傳送資料會丟失







2012年10月31日 星期三

STVD顯示示RAM,FLASH,STACK占用量


mapinfo v0.4 for cosmic map
功能介绍:
1. 对cosmic編譯器生成的map文件進行分析,顯示ram flash EEPROM stack的占用量
ps:RAM僅指RAM變數(全域+静態+局部變數),不包括堆疊(stack)
    eeprom僅能統計由@eeprom定義出的變數或常數
2011-03-24:
1. 修正_Bool類型定義出的变量占用RAM不正確的BUG
2010-10-28:
1. 增加堆疊占用(stack)显示
2. 增加對自定義(未定義)段的顯示,一起統計到unknown顯示
使用方法如下:
1. 將附件壓缩包中的mapinfo.exe解壓並解壓到stvd的\安裝路徑STMicroelectronics\st_toolset\stvd中 
2. 用stvd打開你的工程文件,在工程上點右鍵選settings... 
3. 右側的選項選擇Linker,将category的下拉框选成output,然后在Generate Map file前打勾 
4. 再選擇到分頁Post-Build,在下方文本框中新增一行内容
mapinfo $(OutputPath)$(TargetSName).map 
5. 點擊OK按確定,菜單File->save workspace,保存工程 
6. 重新編譯下,你就能看到flash,ram,eeprom占用字節數了

EEFOCUS 與非網 snoopyzz 分享

或者
在Project->settings->linker分頁中,将Category選為Output,再勾選Generate Map File確認後重新編譯。在專案的\debug 目錄下生成 .map 文件。该文件會詳細地列出RAM/FLASH/EEPROM的分配使用情况。

2012年7月24日 星期二

STVD &STVP OPTION BYTE 設定

在使用STVD編輯進行STM8晶片時 因為STM8有些功能須經由OPTION BYTE開啟才可使用所以在燒錄前 記得要先開啟功能 不然CODE燒進去 發現動作不正常 找了老半天 才發現一個BYTE沒開
下面就介紹在STVD 以及STVP畫面下的設置方法

1.STVD設置方式
在程式編譯完成後,點選TOOL->PROGRAMMER 出現新頁面


在OPTION BYTEU  頁面下 點選要更動的項目

按滑鼠右鍵 出現數個選項,選擇要開啟的功能 完成後按確定 即可

在專案的PROGRAMMER資料夾就會出現OPTIONBYTE.HEX的檔案

2. STVP設置方式
切換到option byte 頁面
 滑鼠移到要開啟的功能,按下拉鈕,選擇功能
切換好後確認 紅線上的數值 是否有改變,然後儲存
ps:在 stvp 更動option byte即使有儲存 下一次開啟專案 還是要重新設定一次
因為在專案的PROGRAMMER資料夾就會出現OPTIONBYTE.HEX的檔案並沒有更動到
所以最好是在STVD更改後再到STVP重新設定一次檔案路徑 ,如此在生產時才不會因OPTION BYTE沒設定而有功能不正常