Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Ищу ПИД регулятор для 8051 на ассемблере для AOUYE 899+

Список форумов» Флейм» Технофлейм
АвторСообщение
slowolitus
Участник
Сообщения: 504




04-12-2012 15:18

Пишу прошивку для AOUYE 899+ всё готово, осталось только организовать ПИД (ПИ) регулятор.

Ищу практическую реализацию целочисленного дискретного регулятора на любом ассемблере, лучше конечно на 8051.

В поиске ничего путного не нашёл, может у кого есть наработки? И вопрос по коэффициентам для фена остаётся неясным, придётся подключать осцилл к выходу усилителя и работать по методу Зиглера–Никольса...или кто то делает по другому?
Transformator
Участник
Сообщения: 1383




04-12-2012 15:38

slowolitus, Так там голая математика.
Или не понятен алгоритм пид регулирования.
Или лень писать самому и хочется готовое решение встроить в свой проект.
slowolitus
Участник
Сообщения: 504




04-12-2012 16:03

Transformator, математика сама понятна, да и написать не проблема, на си например, проблема найти на ассемблере и сделать так чтобы все вычисления были целочисленными...и по возможности короткими...
o_l_e_g
Участник
Сообщения: 2427




04-12-2012 16:48

slowolitus, мсье знает толк в извращениях! гы-гы Писать математику на асме, зачем? или сомневаешься в умственных способностях авторов библиотечных функций, думаешь лучше получится? Хочешь цельночисленные? Так опиши переменные соответствующими типами. ИМХО
slowolitus
Участник
Сообщения: 504




04-12-2012 17:08

o_l_e_g, программа уже написана на асме, если я сейчас начну писать на си да и ещё в формате с плавающей запятой то о том что прога влезет в контроллёр можно и не мечтать, он и так перегружен и места там всего ничего, в оригинальной прошивке ПИДа и в помине не было, только включи и выключи. Прошивка сильно улучшена, алгоритм брезенхема..Вообще си и AT89C2051 это имхо изврат тогда уж С4051
o_l_e_g
Участник
Сообщения: 2427




04-12-2012 17:19

Так напиши математику на Си, а своё творчество оставь ассемблерной вставкой. Код сильно короче не будет, поверь, а ебли с танцами будет! Да и вообще, для только ПИД и индикации, и 2К много.
slowolitus
Участник
Сообщения: 504




04-12-2012 17:35

o_l_e_g, если алгоритм будет без плавающей запятой то можно и на си. А кроме индикации и пид там ещё много чего...например обращение к АЦП по последовательной шине
slav0n
Забанен
Забанен
Сообщения: 2261




04-12-2012 17:41

slowolitus писал:
Ищу практическую реализацию целочисленного дискретного регулятора на любом ассемблере

так возьми Сишный код и препиши на асм.
Погугли - Перевод статьи «Просто о ПИД-алгоритмах»
slowolitus
Участник
Сообщения: 504




05-12-2012 00:47

slav0n, отличная статья, спасибо! , буду разбираться
Владимир Анатольевич
Участник
Сообщения: 5033




05-12-2012 00:59

slowolitus, очень интересно КАК ты будешь подбирать постоянные времени И и Д.
Да в широком диапазоне температур.
Может начнёшь с регулируемого П в П-режиме?
Или этого не достаточно?
slowolitus
Участник
Сообщения: 504




12-12-2012 09:17

Логичнее было бы вставить си код в ассемблер, такое возможно? если да то как?
Вот целочисленный сишный код, нужно что бы он исполнялся в строго заданном месте уже написанного кода, принимал и возвращал значения через строго определённые регистры декларированные в асме.

#define epsilon 2
#define MAX 100
#define MIN 1
#define Kp 5
#define Kd 3
#define Ki 100
#include
signed short PIDcal(signed short TEMP_SET,signed short TEMP_CUR)
{
static signed short pre_error = 0;
static signed short integral = 0;
signed short error;
signed short derivative;
signed short output;

error = TEMP_SET - TEMP_CUR;
if(abs(error) > epsilon)
{
integral = integral + error;
}
derivative = (error - pre_error);
output = Kp*error + integral/Ki + Kd*derivative;
if(output > MAX)
{
output = MAX;
}
else if(output {
output = MIN;
}
pre_error = error;

return output;
}

Добавлено 12-12-2012 09:24

Владимир Анатольевич, коэффициенты буду менять кнопками... а к выходу усилителя термопары подключусь осциллом и буду следить за автоколебаниями по Зиглеру-Николсу ...Потом эту часть кода с подстройкой коэффициентов просто уберу. Дифференциальную часть скорее всего тоже уберу....
slav0n
Забанен
Забанен
Сообщения: 2261




12-12-2012 10:49

slowolitus писал:
Логичнее было бы вставить си код в ассемблер, такое возможно?

это типа - "вперед в прошлое" ?улыбка
Код же простой, и легко переписывается на асм.
Вызывать по прерыванию от таймера.
slowolitus
Участник
Сообщения: 504




12-12-2012 11:15

slav0n, именно так! вперёд в прошлое улыбка
таймеры заняты другими делами, про них можно забыть!
у меня есть ассемблерный листинг но нет исходников стандартных мат-функций вызываемых по lcall
12 EXTRN CODE (_abs)
13 EXTRN CODE (?C?SIDIV)
14 EXTRN CODE (?C?IMUL)

Как их выдрать из кейла? где они хранятся?

Или как вызвать сишную функцию из асма??
Владимир Анатольевич
Участник
Сообщения: 5033




12-12-2012 11:29

slowolitus писал:
Дифференциальную часть скорее всего тоже уберу....

Ну ПИ не получится. Как я и говорил, всё сведётся к П-регулятору с изменяемым коэффициентом.
Или на крайняк подобранным фиксированным.
Досвидание
slav0n
Забанен
Забанен
Сообщения: 2261




12-12-2012 11:45

slowolitus писал:
таймеры заняты другими делами, про них можно забыть!

какими-такими другими делами, если основное дело - ПИД.
Может они фигнёй занимаются на самом деле? улыбка

slowolitus писал:
Как их выдрать из кейла? где они хранятся?

не знаю. А зачем их вытаскивать? Напиши своё.
Я бы для начала умножение-деление заменил сдвигом. А дальше - по поведению системы. В конце статьи написано что-как.
Цитата:
Или как вызвать сишную функцию из асма??

никак
slowolitus
Участник
Сообщения: 504




12-12-2012 11:59

что характерно для этого форума так это то что участники не стремятся помочь вопрошающему а всеми силами пытаются убедить его в том, что то что ему нужно на самом деле ему нахрен не нужно, и так в каждой теме!
slav0n, основное дело это ШИМ управление мотором и индикация, это то на что ушли таймеры а ещё есть брезенхем. а пид это всего навсего кусок кода который осуществляет простые вычисления 16 битных чисел со знаком.

Зачем заменять сдвигом? 8051 прекрасно умножает и делит аппаратно.

есть библиотека беззнаковых 16 битных операций, а со знаком найти не могу... а то бы проблема решилась.

Добавлено 12-12-2012 12:03

Цитата:
никак

не может быть... в x86 такое же прокатывает
starko
Гость 95.153.*.*





12-12-2012 14:52

slowolitus, скажи, пожалуйста, а зачем тебе двубайтные переменные, если фактически двубайтным должен быть только integral, и тот беззнаковый?
slav0n
Забанен
Забанен
Сообщения: 2261




12-12-2012 19:27

slowolitus писал:
основное дело это ШИМ управление мотором и индикация, это то на что ушли таймеры

Никакое оно не основное - ШИМ мотора и дисплей не в петле ОС. Основное - датчики температуры и ШИМы нагревателей. Всё это хозяйство легко можно и на одном таймере завертеть.
slowolitus писал:
а ещё есть брезенхем.

Нафига брезенхем для паяльника и фена?
Список форумов» Флейм» Технофлейм» Ищу ПИД регулятор для 8051 на ассемблере для AOUYE 899+
Перейти:  
Текущий раздел» Флейм» Технофлейм (Различные обсуждения на технические темы)








Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы
Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!